组件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

查看邮件接收告警

大功告成!!!

GitHub 加速计划 / pr / prometheus
54.14 K
8.96 K
下载
Prometheus是一个开源的监控和警报工具,用于监控Kubernetes应用程序和云基础设施的性能和可用性。 - 功能:监控;警报;性能管理;可用性管理;Kubernetes应用程序管理。 - 特点:高可用性;高性能;灵活的数据采集;与Kubernetes集成。
最近提交(Master分支:2 个月前 )
a1a78a15 Revert "Fix `MemPostings.Add` and `MemPostings.Get` data race (#15141)" 5 天前
7c4f8778 * otlptranslator: Harmonize non-UTF8 sanitization w/ naming rules. Harmonize non-UTF8 sanitization w/ Prometheus naming rules. --------- Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com> 5 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐