容器环境 springcloud gateway grafana prometheus采集集成与问题
大家好,我是烤鸭:
记录下网关上容器后,监控升级的过程。
原来的方式
grafana 和 prometheus 网上教程很多,就不细写了。
没上容器之前,可以在 prometheus 的配置文件配置具体的ip地址,进行监控数据拉取。
上了容器之后就不行了,每次发布ip都是动态的。
初次接入
prometheus 有个pushgateway的插件,支持被动接受数据的方式。
网上的开源项目:
https://github.com/prometheus/pushgateway
cloud的项目pom中引入:
<dependency><groupId>io.prometheus</groupId><artifactId>simpleclient_servlet</artifactId><version>0.9.0</version>
</dependency>
<dependency><groupId>io.prometheus</groupId><artifactId>simpleclient_pushgateway</artifactId><version>0.9.0</version></dependency>
bootstrap.yml增加配置:
management:metrics:export:prometheus:pushgateway:enabled: truepush-rate: 60sbase-url: 192.168.1.1:9091 #pushgateway地址job: xxx-gateway-job #job名称
接入的问题
由于第一次没添加ip的上报,导致数据上报的时候都集中在一起,外加频率间隔过大,生成的图也很不好看。
解决方案
修改yml增加配置:
management:metrics:export:prometheus:pushgateway:enabled: truepush-rate: 15s #缩短push频率base-url: 192.168.1.1:9091 #pushgateway地址job: xxx-gateway-job #job名称groupingKey:instance: ${xxxx.prometheus.instance} ##配置这个属性需单独引入ip
ip获取工具类
@Configuration
@ConditionalOnProperty(prefix = "management.metrics.export.prometheus.pushgateway", name = "enabled", havingValue = "true",matchIfMissing = false)
public class PrometheusTagConfig {@BeanMeterRegistryCustomizer<MeterRegistry> configurer() {String ip = this.findFirstNonLoopbackAddress();System.setProperty("xxxx.prometheus.instance", ip);return (registry) -> registry.config().commonTags("instance", ip);}/**** 获取ip* @date 2022/9/16 14:42* @return java.lang.String*/private String findFirstNonLoopbackAddress() {try {InetAddress result = null;int lowest = Integer.MAX_VALUE;for (Enumeration<NetworkInterface> nics = NetworkInterface.getNetworkInterfaces();nics.hasMoreElements(); ) {NetworkInterface ifc = nics.nextElement();if (ifc.isUp()) {if (ifc.getIndex() < lowest || result == null) {lowest = ifc.getIndex();} else if (result != null) {continue;}for (Enumeration<InetAddress> addrs = ifc.getInetAddresses(); addrs.hasMoreElements(); ) {InetAddress address = addrs.nextElement();if (address instanceof Inet4Address && !address.isLoopbackAddress()) {result = address;}}}}return result != null ? result.getHostAddress() : null;} catch (Exception e) {}return null;}
}
现在采集的可以区分ip,而且频率看的曲线比较适合观看。