ptomrtheus监控系统实践,实现企微机器人预警

目录

关于prometheus架构

prometheus HA 部署

涉及组件及版本

安装包获取路径

alertmanager部署

grafana部署

nginx部署


最近在重新建立公司的监控系统,对比了目前的监控的系统,基础资源向使用最多的依旧是zabbix,而且版本也一直在更新,还有的话,就是最近刚出了v5版本的夜莺,之前也有调研过,后者目前也支持prometheus作为数据源。

扫描二维码关注公众号,回复: 16576121 查看本文章

最终选择了prometheus的话,也是因为时间比较急,公司的现状的话,也比较适合用prometheus,所以基础资源、端口、应用层的一些监控用prometheus做,告警的话,初步计划用企业微信机器人实现,后续可以加上邮件告警。

除了prometheus的话,还有就是apm监控了,对比了skyworing、pinpoint、cat后,计划用pinpoint来实现,这个后面的文章会做具体的介绍。

还有的话,就是用elk收集日志,后面后对ng的一些请求响应做监控,后端的一些日志异常报错,也会做监控。

之前调研并实践过的夜莺v5版本:

关于prometheus架构

最开始的想法的话,是计划做联邦集群,然后用victoriametrics,但后面估算了下使用量,其实是用不到的。

最初的一个想法是这样的:

最后实践的时候,其实没有这样做,根据实际的场景,其实是做了一个HA,如下图:

prometheus的话,后面也是这么部署的,然后关于一些采集agent,还有后续的一些告警啥的,可以看下图:

prometheus HA 部署

涉及组件及版本

prometheus 2.36.0nginx 1.6.2alertmanager 0.24.0grafana 8.5.3

安装包获取路径

prometheus:https://github.com/prometheus/prometheus/releases/download/v2.36.1/prometheus-2.36.1.linux-amd64.tar.gzalerthttps://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.tar.gzgrafanawget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.5.6-1.x86_64.rpmnginx

prometheus部署

其中prometheus和alert采用tar包安装,nginx采用编译安装,grafana采用rpm包安装,prometheus采用systremctl管理。

部署的话,其实很简单

 
 
cd /datatar -xvf prometheus-2.36.0.linux-amd64.tar.gzmv prometheus-2.36.0.linux-amd64 prometheusmkdir -p /data/prometheus/{log,data}

然后修改配置文件,可以看下目前的配置文件,主要是涉及到job的配置,还有alert的配置,

 
 
global:  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.  # scrape_timeout is set to the global default (10s).alerting:  alertmanagers:    - static_configs:        - targets: ['192.168.200.9:9093']rule_files:  - "rules/*_rules.yml"  # - "first_rules.yml"  # - "second_rules.yml"scrape_configs:  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.  - job_name: "prometheus"    # metrics_path defaults to '/metrics'    # scheme defaults to 'http'.    static_configs:      - targets: ["192.168.x.x:9090","192.168.x.1:9090"]  - job_name: 'linux_base'    file_sd_configs:    - refresh_interval: 1m      files:      - config_exporter.json  - job_name: blackbox_tcp    scrape_interval: 1m    metrics_path: /probe    params:      module: [tcp_connect]      file_sd_configs:    - refresh_interval: 1m      files:      - config_port.json    relabel_configs:      - source_labels: [__address__]        target_label: __param_target      - source_labels: [__param_target]        target_label: instance      - target_label: __address__        replacement: 192.168.x.2:9115

我这边的node_exporter及blackbox exporter配置文件都是挂在外面,而且支持热更新

config_exporter.json

config_port.json

具体配置可以参考:

[  {
   
       "targets": [ "192.168.x.x:9100"],    "labels": {
   
         "env": "yw"    }  }]

prometheus通过systemctl管理

cat /usr/lib/systemd/system/prometheus.service

[Unit]Description=PrometheusAfter=network.target

[Service]Type=simpleEnvironment="GOMAXPROCS=4"User=rootExecReload=/bin/kill -HUP $MAINPIDExecStart=/data/prometheus/prometheus \  --config.file=/data/prometheus/prometheus.yml \  --storage.tsdb.path=/data/prometheus/data \  --storage.tsdb.retention=30d \  --web.console.libraries=/data/prometheus/console_libraries \  --web.console.templates=/data/prometheus/consoles \  --web.listen-address=0.0.0.0:9090 \  --web.read-timeout=5m \  --web.max-connections=10 \  --query.max-concurrency=20 \  --query.timeout=2m \  --web.enable-lifecyclePrivateTmp=truePrivateDevices=trueProtectHome=trueNoNewPrivileges=trueLimitNOFILE=infinityReadWriteDirectories=/data/prometheusProtectSystem=fullSyslogIdentifier=prometheusRestart=always[Install]WantedBy=multi-user.target

设置好后,需要重置下

systemctl daemon-reload

alertmanager部署

tar -xvf alertmanager-0.24.0.linux-amd64.tar.gz

修改配置文件,因为是通过企微信机器人去告警的,是通过python起了一个web服务,然后配置了web hook来实现

route:  group_by: ['alertname']  group_wait: 30s  group_interval: 5m  repeat_interval: 1h  receiver: 'web.hook'receivers:  - name: 'web.hook'    webhook_configs:      - url: 'http://192.168.x.x:5000'inhibit_rules:  - source_match:      severity: 'critical'    target_match:      severity: 'warning'    equal: ['alertname', 'dev', 'instance']

告警的话,大概是长这样:

【恢复】生产环境 blackbox_network_stats 有报警恢复告警级别: critical 告警类型: blackbox_network_stats 告警主机: 192.168.x.x:9100 告警系统: ops 告警详情: This requires immediate action! 告警状态: resolved 触发时间: 2022-06-16 11:05:48 +08:00 触发结束时间: 2022-06-16 16:06:48 +08:00

具体关于python服务的这里就不写了,后续有需要可以后台留言。

grafana部署

这个的话,就很简单了,直接rpm部署

rpm -ivh grafana-8.5.3-1.x86_64.rpm

grafana的话,更多的是一个仪表盘展示,这里加了node和blackbox的,网上有蛮多成熟的例子,可以直接拿来用。

nginx部署

主要是用来负载prometheus,还有就是一些组件的代理出去

编译安装即可。

这样的话,一套最基础的监控系统就是部署完了,而且实现了通过企业微信机器人的告警,后面的话,是pinpoint的一个集群化部署、ELK的集群部署。

其实部署只是第一步,后面的一些使用才是重要的。

猜你喜欢

转载自blog.csdn.net/smallbird108/article/details/125466785