轻量级的系统监控程序
运行sysdig容器
[root@docker ~]# docker pull sysdig/sysdig
[root@docker ~]# docker run -it --rm --name sysdig --privileged=true --volume=/var/run/docker.sock:/host/var/run/docker.sock --volume=/dev:/host/dev --volume=/proc:/host/proc:ro --volume=/boot:/host/boot:ro --volume=/lib/modules:/host/lib/modules:ro --volume=/usr:/host/usr:ro sysdig/sysdig
下载插件失败后可以运行下边的命令,重新下载
root@358c10c2ca15:/# sysdig-probe-loader
下载成功之后,可以运行sysdig命令,查看监控项
root@358c10c2ca15:/# csysdig
图形化的显示,能够直观的看到容器资源使用情况,便于理解,监控和控制容器
[root@docker ~]# curl -L git.io/scope -o /usr/local/bin/scope
[root@docker ~]# chmod a+x /usr/local/bin/scope
[root@docker ~]# scope launch
Unable to find image 'weaveworks/scope:1.13.1' locally
1.13.1: Pulling from weaveworks/scope
c9b1b535fdd9: Pull complete
550073704c23: Pull complete
8738e5bbaf1d: Pull complete
0a8826d26027: Pull complete
387c1aa951b4: Pull complete
e72d45461bb9: Pull complete
75cc44b65e98: Pull complete
11f7584a6ade: Pull complete
a5aa3ebbe1c2: Pull complete
7cdbc028c8d2: Pull complete
Digest: sha256:4342f1c799aba244b975dcf12317eb11858f9879a3699818e2bf4c37887584dc
Status: Downloaded newer image for weaveworks/scope:1.13.1
dd8502a30203e4c17604ce589fe21413103d4977632321892315359233b1fb43
Scope probe started
Weave Scope is listening at the following URL(s):
* http://192.168.122.1:4040/
* http://192.168.1.40:4040/
Prometheus官网
组件 | 说明 |
---|---|
Prometheus Server | 普罗米修斯的主服务器 |
NodeEXporter | 负责收集Host硬件信息和操作系统信息 |
cAdvisor | 负责收集Host上运行的容器信息 |
Grafana | 负责展示普罗米修斯监控界面 |
环境:
主机名称 | IP地址 | 安装组件 |
---|---|---|
machine(主服务器) | 192.168.1.40 | NodeEXporter、cAdvisor、Prometheus Server、Grafana |
node01 | 192.168.1.41 | NodeEXporter、cAdvisor |
node02 | 192.168.1.42 | NodeEXporter、cAdvisor |
所有服务器都部署
[root@docker ~]# docker run -d --name node-EXporter -p 9100:9100 -v /proc:/host/proc -v /sys:/host/sys -v /:/rootfs --net=host prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
PS:注意,这里使用了–net=host,这样Prometheus Server可以直接与Node-EXporter通信。
所有服务器都部署
[root@docker ~]# docker run -v /:/rootfs:ro -v /var/run:/var/run/:rw -v /sys:/sys:ro -v /var/lib/docker:/var/lib/docker:ro -p 8080:8080 --detach=true --name=cadvisor --net=host google/cadvisor
在部署prometheus之前,我们需要对它的配置文件进行修改,所以我们先运行一个容器,先将其配置文件拷贝出来。
[root@machine ~]# docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
[root@machine ~]# docker cp prometheus:/etc/prometheus/prometheus.yml ./
[root@machine ~]# cat prometheus.yml
......
static_configs:
- targets: ['localhost:9090','localhost:8080','localhost:9100','192.168.1.41:8080','192.168.1.41:9100','192.168.1.42:8080','192.168.1.42:9100']
[root@machine ~]# docker rm -f prometheus
prometheus
[root@machine ~]# docker run -d -p 9090:9090 --name prometheus --net=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
WARNING: Published ports are discarded when using host network mode
88565574609b515e7ff6785e834a26e223ced08f6c90a4cbd502e0d52579225e
[root@machine ~]# mkdir grafana-storage
[root@machine ~]# chmod 777 -R grafana-storage/
[root@machine ~]# docker run -d -p 3000:3000 --name grafana -v /root/grafana-storage:/var/lib/grafana -e "GF_SECURITY_ADMIN_PASSWORD=123.com" grafana/grafana
模板官网为:https://grafana.com/
[root@machine ~]# docker run --name alertmanager -d -p 9093:9093 prom/alertmanager:latest
[root@machine ~]# docker cp alertmanager:/etc/alertmanager/alertmanager.yml ./
[root@machine ~]# cp alertmanager.yml alertmanager.ymlbak
PS:现在是没有任何告警信息的,因为我们还没有配置报警规则来触发报警
1. 打开SMTP服务
2.修改配置文件
主要配置的作用:
- global: 全局配置,包括报警解决后的超时时间、SMTP 相关配置、各种渠道通知的 API 地址等等。
- route: 用来设置报警的分发策略,它是一个树状结构,按照深度 优先从左向右的顺序进行匹配。
- receivers: 配置告警消息接受者信息,例如常用的 email、wechat、slack、webhook 等消息通知方式。
- inhibit_rules: 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)
[root@machine ~]# cat alertmanager.yml
global:
resolve_timeout: 5m
smtp_from: '******@163.com'
smtp_smarthost: 'smtp.163.com:465'
smtp_auth_username: '*******@163.com'
smtp_auth_password: '********'
smtp_require_tls: false
smtp_hello: '163.com'
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '[email protected]'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
[root@machine ~]# docker rm -f alertmanager
alertmanager
[root@machine ~]# docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager:latest
8a9835e97f039921187a85a2e71a8c869342a4f6aa721fadb9d4a27a9bc2728e
以上模板中涉及的163邮箱换成自己的即可,授权码也一样
以上配置我反复试验后,发现不同的环境参数配置也不一样,调试期间 出现了各种报错问题,将其中几个关键的配置说明一下:
- smtp_smarthost: 这里为 163邮箱 SMTP 服务地址,官方地址为smtp.163.com 端口为 465 或 587,同时要设置开启 POP3/SMTP服务。
- smtp_auth_password: 这里为第三方登录 163 邮箱的授权码,非163账户登录密码,否则会报错,获取方式在 163邮箱服务端设置开启 POP3/SMTP 服务时会提示。
- smtp_require_tls: 是否使用 tls,根据环境不同,来选择开启和关闭。如果提示报错 email.loginAuth failed: 530 Must issue aSTARTTLS command first,那么就需要设置为 true。着重说明一下,如果开启了 tls,提示报错 starttls failed: x509: certificatesigned byunknown authority,需要在 email_configs 下配置insecure_skip_verify: true 来跳过tls 验证
Prometheus官网rule参考
[root@machine ~]# mkdir -p prometheus/rules
[root@machine ~]# cd prometheus/rules/
[root@machine rules]# cat node-up.rules
groups:
- name: node-up
rules:
- alert: node-up #告警名称
expr: up{job="prometheus"} == 0 #和之前的Prometheus.yml里Job name相对应
for: 15s # 15秒之后会告警
labels:
severity: 1 #严重重读
team: node
annotations:
summary: "{{ $labels.instance }} 已停止运行超过 15s!"
[root@machine ~]# vim prometheus.yml
......
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.1.40:9093 #打开监听端扣
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- "/usr/local/prometheus/rules/*.rules" #添加规则文件路径,注意事项容器内路径!!!
# - "first_rules.yml"
# - "second_rules.yml"
......
[root@machine ~]# docker rm -f prometheus
prometheus
[root@machine ~]# docker run -d -p 9090:9090 -v /root/prometheus.yml:/etc/prometheus/prometheus.yml -v /root/prometheus/rules:/usr/local/prometheus/rules --name prometheus --net=host prom/prometheus
WARNING: Published ports are discarded when using host network mode
22e16c5d8a36d9e993105b29afc4490c9f6fa0e20d7813c3c93105e95c1c1522
PS:该 rules 目的是监测 node 是否存活,expr 为 PromQL 表达式验证特定节点 job=“node-exporter” 是否活着,for 表示报警状态为Pending 后等待 15s 变成 Firing 状态,一旦变成 Firing 状态则将报警发送到 AlertManager,labels 和 annotations 对该 alert 添加更多的标识说明信息,所有添加的标签注解信息,以及 prometheus.yml 中该 job 已添加 label 都会自动添加到邮件内容中。
PS:关闭node01的exporter组件失败
[root@docker01 ~]# docker stop zealous_mclean
zealous_mclean
[root@machine ~]# cd prometheus/
[root@machine prometheus]# mkdir alertmanager-tmpl
[root@machine prometheus]# cd alertmanager-tmpl/
[root@machine alertmanager-tmpl]# vim email.tmpl
{{ define "email.from" }}wfp88888@163.com{{ end }}
{{ define "email.to" }}wfp88888@163.com{{ end }}
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========
告警程序: prometheus_alert
告警级别: {{ .Labels.severity }} 级
告警类型: {{ .Labels.alertname }}
故障主机: {{ .Labels.instance }}
告警主题: {{ .Annotations.summary }}
触发时间: {{ .StartsAt.Format "2020-09-18 19:25:00" }}
=========end==========
{{ end }}
{{ end }}
[root@machine alertmanager-tmpl]# cd
[root@machine ~]# vim alertmanager.yml
global:
resolve_timeout: 5m
smtp_from: '******@163.com'
smtp_smarthost: 'smtp.163.com:465'
smtp_auth_username: '*******@163.com'
smtp_auth_password: '********'
smtp_require_tls: false
smtp_hello: '163.com'
templates:
- '/etc/alertmanager-tmpl/*.tmpl' #这里的路径是容器内的路径
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '{{ template "email.to" }}'
html: '{{ template "email.to.html" . }}' #发送的html,从我们自定的模板找那个获取!
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
[root@machine ~]# docker rm -f alertmanager
alertmanager
[root@machine ~]# docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml -v /root/prometheus/alertmanager-tmpl:/etc/alertmanager-tmpl prom/alertmanager
12aacd93931b5ec4563be8a1167437054d036ffb556c3ce0659df5ddd1c1d331
PS:再次关闭node01的exporter模拟组件失败
[root@docker01 ~]# docker stop zealous_mclean
zealous_mclean
我们会看到,时间不对,这是因为邮件是全球服务,所以,我们需要更改一下语句,在时间上加上东八区时间!!
...
[root@machine ~]# vim prometheus/alertmanager-tmpl/email.tmpl
......
10 告警主题: {{ .Annotations.summary }}
11 触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05"
...
[root@machine ~]# docker restart alertmanager
alertmanager