烟台工程建设信息网站,自建网站平台有哪些,文化厅网站建设审核报告单,苏州小程序开发企业系列文章目录
运维监控平台搭建 运维监控平台监控标签 golang_Consul代码实现Prometheus监控目标的注册以及动态发现与配置V1版本 文章目录 系列文章目录目的一、监控指标注册到consul的golang脚本开发1、修改settings.yaml文件2、修改config/ocnsul,go文件3、修改core/consul…系列文章目录
运维监控平台搭建 运维监控平台监控标签 golang_Consul代码实现Prometheus监控目标的注册以及动态发现与配置V1版本 文章目录 系列文章目录目的一、监控指标注册到consul的golang脚本开发1、修改settings.yaml文件2、修改config/ocnsul,go文件3、修改core/consul.go文件4、脚本演示4.1、准备整理好的监控指标文件xlsx格式4.2、注册上述监控指标到consul 中 二、Prometheus使用consul服务发现配置1.修改prometheus.yml文件2、telegraf配置自定义监控项2.1、示例1: 监控内核参数 三、监控接口配置示例 目的
1、在面临多个监控指标时实现快速的将指标注册到consul中Prometheus使用consul服务发现实现监控 2、编写脚本实现自定义监控指标 3、自定监控项监控配置调试 提示以下是本篇文章正文内容下面案例可供参考
一、监控指标注册到consul的golang脚本开发
在之前就已经发布过golang_Consul代码实现Prometheus监控目标的注册以及动态发现与配置脚本。如顶部第三个文章链接。
虽然之前写的脚本已经实现了注册服务器ip、微服务ip和端口、url等到consul中但是只能适用于无密码、无token的consul
但是现在的运维平台consul是开启了ACL认证的因此需要对脚本做出部分修改。修改部分如下所示因为之前在https://blog.csdn.net/weixin_50902636/article/details/139903589文章中已经对该注册脚本进行了分析讲解及使用示例因此在本篇文章中不做过多描述只对修改部分示例。同时更新后的脚本已上传至csdn资源中需要的自行下载即可
1、修改settings.yaml文件
consul:ip: 192.168.56.131port: 8500acl_status: true #新添加字段判断是否开启了acl认证token: a0de7f26-127b-cd67-f01e-477c212d7c48 #新添加字段consul开启acl后的认证token。其余字段保持不变service_name:- Host_Status- ICMP- Telegraf- Service_TCP- Service_URLxlsx:xlsxfile_path: /export/wxd/prometheus_import_consul/host_monitor_datasource.xlsxsheet_name:- hostinfo- serviceinfo- serviceurlInfojsonfile:hostjson_path: /export/wxd/prometheus_import_consul/jsonfile/host.jsonservicejson_path: /export/wxd/prometheus_import_consul/jsonfile/service.jsonserviceurljson_path: /export/wxd/prometheus_import_consul/jsonfile/serviceUrl.json2、修改config/ocnsul,go文件
package configimport fmt//连接consul的ip、端口
type Consul struct {IP string yaml:ipPort int yaml:portAcl_Status bool yaml:acl_status #将yaml文件中新增加的字段 添加到结构体中用于字段解析初始化Token string yaml:token #将yaml文件中新增加的字段 添加到结构体中用于字段解析初始化ServiceName []string yaml:service_name
}func (c *Consul) URL() string {return fmt.Sprintf(%s:%d, c.IP, c.Port)
}3、修改core/consul.go文件
package coreimport (logprometheus_import_consul/globalgithub.com/hashicorp/consul/api
)// consul 初始化
func ConsulConnect() (*api.Client, error) {config : api.DefaultConfig()// 新添加 根据 acl_status 判断是否使用 acl_Tokenif global.Config.Consul.Acl_Status {config.Token global.Config.Consul.Tokenlog.Printf(consul ACL authentication is enabled. Using token: %s, config.Token)} else {log.Println(consul ACL authentication is disabled. Not using any token.)}config.Address global.Config.Consul.URL()if client, err : api.NewClient(config); err ! nil {return nil, err} else {return client, nil}
}其余代码不变如果有需要新增其他类型的监控在修改代码即可
4、脚本演示
4.1、准备整理好的监控指标文件xlsx格式 4.2、注册上述监控指标到consul 中
代码构建为二进制程序
[rootpython2 prometheus_import_consul]# sh scripts/launch.sh build prometheus_consul
[rootpython2 prometheus_import_consul]# cat scripts/nohup.out解析xlsx文件中所有sheet页为json文件
[rootpython2 prometheus_import_consul]# sh scripts/launch.sh run-execToAllJson prometheus_consul将转换为json格式的文件注册到consul中
[rootpython2 prometheus_import_consul]# sh scripts/launch.sh run-all prometheus_consul检查consul web中是否已有上述注册信息 如上图所示golang脚本已完美的实现监控指标注册功能。具体的脚本功能请自行下载查看
二、Prometheus使用consul服务发现配置
修改prometheus.yml文件使其监控已经注册到consul中的监控指标
1.修改prometheus.yml文件 文件如下示例 - job_name: consul-prometheusconsul_sd_configs:- server: 192.168.56.131:8500token: a0de7f26-127b-cd67-f01e-477c212d7c48relabel_configs:- source_labels: [__meta_consul_service]regex: .*monitor_agent.*action: keep- source_labels: [__meta_consul_service_address]target_label: ip- source_labels: [__meta_consul_service_port]target_label: port- job_name: Host_Statusmetrics_path: /probeparams:module: [icmp]scrape_interval: 60sscrape_timeout: 2sconsul_sd_configs:- server: 192.168.56.131:8500services: []token: a0de7f26-127b-cd67-f01e-477c212d7c48relabel_configs:- source_labels: [__meta_consul_tags]regex: .*Host_Status.*action: keep- source_labels: [__meta_consul_service_address]target_label: __param_target- target_label: __address__replacement: 192.168.56.131:9115- regex: __meta_consul_service_metadata_(.)action: labelmap- job_name: Service_tcpscrape_interval: 60sscrape_timeout: 5smetrics_path: /probeparams:module: [tcp_connect]consul_sd_configs:- server: 192.168.56.131:8500services: []token: a0de7f26-127b-cd67-f01e-477c212d7c48relabel_configs:- source_labels: [__meta_consul_tags]regex: .*Service_TCP.*action: keep- source_labels: [__address__]target_label: __param_target- target_label: __address__replacement: 192.168.56.131:9115- regex: __meta_consul_service_metadata_(.)action: labelmap- job_name: Service_urlscrape_interval: 60sscrape_timeout: 5smetrics_path: /probeparams:module: [http_2xx] consul_sd_configs:- server: 192.168.56.131:8500services: []token: a0de7f26-127b-cd67-f01e-477c212d7c48relabel_configs:- source_labels: [__meta_consul_tags]regex: .*Service_URL.*action: keep- source_labels: [__meta_consul_service_metadata_url]target_label: __param_target- target_label: __address__replacement: 192.168.56.131:9115- regex: __meta_consul_service_metadata_(.)action: labelmap- job_name: icmpparams:module:- icmpscrape_interval: 60sscrape_timeout: 2smetrics_path: /probeconsul_sd_configs:- server: 192.168.56.131:8500token: a0de7f26-127b-cd67-f01e-477c212d7c48relabel_configs:- source_labels: [__meta_consul_tags]regex: .*,prometheus-icmp,.* # 扫描对应的组的信息action: keep- source_labels: [__meta_consul_tags]regex: .*,ICMP:([^,]),.*replacement: ${1}target_label: __param_target- source_labels: [__param_target]target_label: instance- regex: __meta_consul_service_metadata_(.)action: labelmap- target_label: __address__replacement: localhost:91152、telegraf配置自定义监控项
2.1、示例1: 监控内核参数
代码如下示例
当在https://github.com/influxdata/telegraf/tree/release-1.30/plugins/inputs中不到对应的服务监控配置时,则可以使用自定义监控项的方式实现监控。在github中可以找到大部分开源组件的telegraf的监控配置,粘贴修改后即可使用。先看结果 实现过程
需求:需要通过监控telegraf组件实现对10.192.10.14服务器的/etc/sysctl.conf中配置的内核参数进行监控实现过程:1、联想到zabbix监控可以通过agent端编辑相关的conf文件,且conf文件中编写脚本或者其他采集发送,实现某个时刻组件的监控,因此再telegraf/scripts目录下也用同样方式测试是否能实现2、在10.192.10.14机器的/opt/monitor/telegraf/scripts/目录下,增加一个探测的脚本文件check_tcp_timesmaps.sh,并授权执行权限。脚本内容如下#!/bin/bash
# 读取net.ipv4.tcp_timestamps的值value$(sysctl net.ipv4.tcp_timestamps | awk {print $3})
# 输出为InfluxDB格式的指标echo tcp_timestamps value$value #其中tcp_timestamps为监控项,也就是使用它可以在prometheus的web界面中查看对应的数据即它就是一个自定义的PromQL.3、在10.192.10.14机器的/opt/monitor/telegraf/etc/telegraf/telegraf.d/目录下新增类似zabbix中的conf文件,配置如下[[inputs.exec]] #使用telegraf的exec插件,它还有inputs.中间件名 的插件#指定脚本位置commands [/opt/monitor/telegraf/scripts/check_tcp_timestamps.sh]#探测超时时间timeout 5s#数据格式通常为influx类型data_format influx4、在10.192.10.14机器的/opt/monitor/telegraf/etc/telegraf/telegraf.conf主配置文件中,必须添加以下配置.配置Prometheus从Telegraf抓取对应的指标[[outputs.prometheus_client]]listen :92735、在监控机器中配置对应的yml告警规则增加 /opt/monitor/prometheus/rules/sysctl_tcp_timesamps.yml文件,配置文件如下groups:- name: tcp_timestamps_checkrules:- alert: TCPTimestampsDisabledexpr: tcp_timestamps ! 0for: 1mlabels:severity: warningannotations:summary: TCP Timestamps is not disabled (host {{ $labels.instance }})description: net.ipv4.tcp_timestamps is expected to be 0 but is {{ $value }} on {{ $labels.instance }}三、监控接口配置示例
将接口以静态服务发现方式添加到prometheus.yml中
- job_name: V3getActivityInfometrics_path: /probeparams:module: [v3getActivityInfo] #等价于blackbox.yml文件中定义的名称static_configs:- targets: [https://xxxx/activity/V3/getActivityInfo]labels:servicetype: 活动查询接口V3POSTmonitortype: business_monitorrelabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: localhost:9115通过黑盒监控修改balckbox_exporter.yml文件中添加该接口的请求方式、请求体及返回值
V3getActivityInfo:prober: httptimeout: 5shttp:method: POST #可以替换为对应的请求方式preferred_ip_protocol: ip4 #defaults to ip6valid_http_versions: [HTTP/1.1,HTTP/2.0]valid_status_codes: [200] #defaults to 2xx 如果返回的 HTTP 状态码不在 valid_status_codes 指定的范围内则会被认为是探测失败headers: #配置post请求的header头Content-Type: application/jsonClientId: xxxxxxxxxxbody: {data: {signData: 72KFee7x9izEYwvrmOfh/KgzzdjNjf6Ud1Wk19BJZnClY/Q79/rEt9wkspsY/uQYleg9igJ1R5xUTEPWAoRdT111A}}fail_if_body_not_matches_regexp: #如果响应体中不包含匹配该正则表达式的内容则探测被视为失败- 30001至此接口监控已完成