prometheus安装实践
组件1:Prometheus 搜集时间戳监控项内容,编写函数触发警告
组件2:alertmanager 获取警告,并发送告警信息给邮箱,钉钉等
组件3:node_exporter 客户端,用来响应请求时间戳监控内容
下载地址:https://prometheus.io/download/
单机部署,只为做新手入门,生产建议配置2台Prometheus同时监控,互相监控。
alertmanager做keepalive冗余,或nginx代理。
环境阿里云3台主机:
OS:centos7.5
我已下载至home,解压得到二进制文件
#tar -xzf prometheus-2.34.0-rc.2.linux-amd64.tar.gz
#tar -zxf alertmanager-0.23.0.linux-amd64.tar.gz
scp node_exporter-1.3.1.linux-amd64.tar.gz root@k8s-node101:/home
scp node_exporter-1.3.1.linux-amd64.tar.gz root@k8s-node102:/home
3台节点都运行
#tar -zxf node_exporter-1.3.1.linux-amd64.tar.gz
把二进制目录移动至自己喜欢的地方,比如我放在/usr/local/,当然你也可以放在别的地方
#mv prometheus-2.34.0-rc.2.linux-amd64 /usr/local/prometheus
#mv alertmanager-0.23.0.linux-amd64 /usr/local/alertmanager
3台节点都运行
#mv node_exporter-1.3.1.linux-amd64 /usr/local/node_exporter
用二进制文件配置systemd,这一步主要是为了systemctl 管理服务,并设置开机启动
#vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=https://prometheus.io
After=network.target
[Service]
WorkingDirectory=/usr/local/prometheus
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus
ExecReload=/bin/kill -HUP $MAINPID
Type=simple
KillMode=control-group
RestartSec=10
[Install]
WantedBy=multi-user.target
#vim /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=https://prometheus.io
After=network.target
[Service]
WorkingDirectory=/usr/local/alertmanager
Restart=on-failure
ExecStart=/usr/local/alertmanager/systemctl daemon-reload
ExecStop=/bin/kill -KILL $MAINPID
Type=simple
ExecReload=/bin/kill -HUP $MAINPID
KillMode=control-group
RestartSec=10
[Install]
WantedBy=multi-user.target
3台节点都运行(这里用了http认证,三台的用户名密码一样)
#vim /usr/local/node_exporter/web-config.yml
basic_auth_users:
k8s: $2y$10$1ak5ZyK2wfbnMsv0/L78aOOAEiR3JI6PC2AnTf/Ictdh6prB4Um0.
注意格式:
这里的密码需要加密,加密命令为:htpasswd -nBC 10 "k8s" ,根据提示输入密码:
htpasswd 命令需要 yum install -y httpd-tools
如果想用https,请参考:
https://github.com/prometheus/exporter-toolkit/blob/v0.1.0/https/README.md
3台节点都运行
#vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=https://prometheus.io
After=network.target
[Service]
WorkingDirectory=/usr/local/node_exporter
Restart=on-failure
ExecStart=/usr/local/node_exporter/node_exporter --web.config=web-config.yml
ExecStop=/bin/kill -KILL $MAINPID
Type=simple
#ExecReload=/bin/kill -HUP $MAINPID
KillMode=control-group
RestartSec=10
[Install]
WantedBy=multi-user.target
#systemctl daemon-reload
组件1监听端口:9090,无账号认证
#systemctl enable prometheus
组件2监听端口:9093
#systemctl enable alertmanager
组件3监听端口:9100
3台节点都运行
#systemctl start node_exporter
#systemctl enable node_exporter
添加被监控节点,注意yml格式
此处的密码,是你上面输入的密码
#vim /usr/local/prometheus/prometheus.yml
检查语法
#cd /usr/local/prometheus
#./promtool check config prometheus.yml
启动prometheus
#systemctl start prometheus
登录:IP:9090,进去自己熟悉一下【status】,因为不需要密码,记得不要放在公网
让我们添加3个监控项
#内存使用率
node_memory_Active_bytes/node_memory_MemTotal_bytes*100
#CPU使用率-平均5分钟内
avg(irate(node_cpu_seconds_total{mode="idle"}[5m]))by(instance)*100
#磁盘使用率
(1-node_filesystem_avail_bytes{mountpoint=~"/|/run ",device="rootfs"}/node_filesystem_size_bytes{mountpoint=~"/|/run ",device="rootfs"})*100
告警需要设置prometheus,发送alertmanager,然后在alertmanager设置邮箱和钉钉推送
继续,启动alertmanager
#systemctl start alertmanager
在Prometheus中添加告警规则
#vim /usr/local/prometheus/prometheus.yml
#vim /usr/local/prometheus/rules/k8s_basic.yml
groups:
- name: alert_test
rules:
- alert: "memory high > 85"
expr: avg(irate(node_cpu_seconds_total{mode="idle"}[5m]))by(instance)*100 >= 85
for: 2m
labels:
severity: 'critical'
再次提醒注意yml的格式
检查语法
#/usr/local/prometheus/r/promtool check rules rules/k8s_basic.yml
systemctl reload prometheus
这时,表达式如果触发,Prometheus就会告警了。
我的1台节点cpu使用率90%,我设置这个大于85的时候触发告警
因为我设置了for: 2m,所以2m之内pending,变黄
2分钟之后告警,变红
注意,这里是Prometheus的告警哟,我们要想收到通知的话,就要使用alertmanager了。
下面介绍alertmanager,怎么把这个告警通知到你。
把alertmanager地址添加到Prometheus中
#vim /usr/local/prometheus/prometheus.yml
systemctl reload prometheus
此时,Prometheus会把告警推给alertmanager
访问alertmanager:IP:9093
alertmanager已收到Prometheus的告警。
接下来,让alertmanager把告警推送出去!
#vim /usr/local/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m #故障恢复后多久发恢复邮件
route:
group_by: ['alertname']
group_wait: 30s #首次触发,等30秒搜集汇总
group_interval: 5m #群组收到告警5分钟内不变化,才发送
repeat_interval: 1h #故障不解决,1小时发送一次
receiver: 'email-me'
receivers:
- name: 'email-me'
email_configs:
- to: "接收者@qq.com"
from: "your@qq.com"
smarthost: "your-smtp.qq.com:465" #你的邮件服务器
auth_username: "your@qq.com"
auth_identity: "your@qq.com"
auth_password: "XXXXX" #你的邮件服务器授权码
require_tls: false #不使用https
send_resolved: true #告警消除邮件发送
inhibit_rules: #告警抑制
- source_match:
alert: "memory high > 85"
severity: 'critical'
target_match:
alert: "memory high > 85"
severity: 'critical'
equal: ['alertname', 'dev', 'instance']
#systemctl reload alertmanager
查看邮件接收告警
大功告成!!!
更多推荐
所有评论(0)