目录
最近在重新建立公司的监控系统,对比了目前的监控的系统,基础资源向使用最多的依旧是zabbix,而且版本也一直在更新,还有的话,就是最近刚出了v5版本的夜莺,之前也有调研过,后者目前也支持prometheus作为数据源。
最终选择了prometheus的话,也是因为时间比较急,公司的现状的话,也比较适合用prometheus,所以基础资源、端口、应用层的一些监控用prometheus做,告警的话,初步计划用企业微信机器人实现,后续可以加上邮件告警。
除了prometheus的话,还有就是apm监控了,对比了skyworing、pinpoint、cat后,计划用pinpoint来实现,这个后面的文章会做具体的介绍。
还有的话,就是用elk收集日志,后面后对ng的一些请求响应做监控,后端的一些日志异常报错,也会做监控。
之前调研并实践过的夜莺v5版本:
关于prometheus架构
最开始的想法的话,是计划做联邦集群,然后用victoriametrics,但后面估算了下使用量,其实是用不到的。
最初的一个想法是这样的:
最后实践的时候,其实没有这样做,根据实际的场景,其实是做了一个HA,如下图:
prometheus的话,后面也是这么部署的,然后关于一些采集agent,还有后续的一些告警啥的,可以看下图:
prometheus HA 部署
涉及组件及版本
prometheus 2.36.0
nginx 1.6.2
alertmanager 0.24.0
grafana 8.5.3
安装包获取路径
prometheus:
https://github.com/prometheus/prometheus/releases/download/v2.36.1/prometheus-2.36.1.linux-amd64.tar.gz
alert
https://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.tar.gz
grafana
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.5.6-1.x86_64.rpm
nginx
prometheus部署
其中prometheus和alert采用tar包安装,nginx采用编译安装,grafana采用rpm包安装,prometheus采用systremctl管理。
部署的话,其实很简单
cd /data
tar -xvf prometheus-2.36.0.linux-amd64.tar.gz
mv prometheus-2.36.0.linux-amd64 prometheus
mkdir -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=Prometheus
After=network.target
[Service]
Type=simple
Environment="GOMAXPROCS=4"
User=root
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/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-lifecycle
PrivateTmp=true
PrivateDevices=true
ProtectHome=true
NoNewPrivileges=true
LimitNOFILE=infinity
ReadWriteDirectories=/data/prometheus
ProtectSystem=full
SyslogIdentifier=prometheus
Restart=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的集群部署。
其实部署只是第一步,后面的一些使用才是重要的。