prometheus安装

Prometheus+Grafana+Altermanager监控告警

小冯先生 2019-06-13 12:34:34  5000  收藏 14
展开
参考
https://blog.csdn.net/qq_36357820/article/details/80777167
https://blog.csdn.net/enweitech/article/details/80896186
https://www.cnblogs.com/sfnz/p/6566951.html
https://blog.csdn.net/liukuan73/article/details/78881008

Prometheus介绍
Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。

Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker 。

Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。

输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等),具体支持的源看:https://github.com/prometheus。这里可以找到很多exporter。

监控架构图


安装配置
Prometheus
首先安装go环境
wget https://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz    #下载包
sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz    #解压包
sudo vim /etc/profile  #打开环境变量配置文件,写入如下内容(位置根据实际的存放位置为准)
export GO_HOME=/usr/local/go
export PATH=$GO_HOME/bin:$PATH
source /etc/profile   # 重启环境变量
go version    #查看版本号验证是否安装成功
1
2
3
4
5
6
7
安装Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.3.0/prometheus-2.3.0.linux-amd64.tar.gz    #下载包
tar zxvf prometheus-2.3.0.linux-amd64.tar.gz -C ~/software   #解压包至指定任意目录,本人习惯所有工具放在一个地方统一管理
cd ~/software/prometheus-2.3.0.linux-amd64   #进入解压后的文件
vim  prometheus.yml    #编辑配置文件
1
2
3
4
修改/添加配置文件prometheus.yml
job_name酌情命名,因为现在还不支持删除job信息;并且修改也是生成一个新的job,会出现新旧并存的情况(博主遇坑,回来做个提醒)
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: ['localhost:9090']
      labels:
          instance: prometheus
  - job_name: node
    static_configs:
      - targets: ['localhost:9100']        #博主的node_exporter安装在本地,如果安装在其他机器使用IP即可,9100是node_exporter的端口号
        labels:
          instance: server1                #名称,根据自己爱好取就行了
  - job_name: mysql
    static_configs:
      - targets: ['localhost:9104']      #博主的mysqld_exporter安装在本地,如果安装在其他机器使用IP即可,9104是mysqld_exporter的端口号
        labels:
          instance: db1                     #名称,根据自己爱好取就行了
  - job_name: redis
    static_configs:
      - targets: ['localhost:9121']      #博主的redis_exporter安装在本地,如果安装在其他机器使用IP即可,9121是redis_exporter的端口号
        labels:
          instance: redis1                     #名称,根据自己爱好取就行了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
启动prometheus
cd ~/software/prometheus-2.3.0.linux-amd64
nohup ./prometheus --config.file=prometheus.yml &     #启动prometheus并后台运行,推荐cd到目录下再运行,这样nohup的日志就会存在当前目录,如果在系统根目录下运行,所有的nohup.out日志文件会混淆
ps -ef | grep prometheus  #检查进程的方式查看是否运行成功,如果没有运行成功就去掉nohup直接运行查看一下错误原因
1
2
3
node_exporter
node_exporter也是需要go的环境,安装在被监控的设备上(本文是都安装在同一台机器)
安装node_exporter
wget https://github.com/prometheus/node_exporter/releases/download/v0.18.0/node_exporter-0.18.0.linux-amd64.tar.gz    #下载包,v0.18版本,由于grafana仪表板支持v0.16、v0.17、v0.18版本
tar xvf node_exporter-0.18.0.linux-amd64.tar.gz -C ~/software   #解压包至指定任意目录,此处不多说
1
2
启动node_exporter
cd ~/software/node_exporter-0.18.0.linux-amd64   #进入解压后的文件
nohup ./node_exporter &    #启动node_pxporter并后台运行,推荐cd到目录下再运行,这样nohup的日志就会存在当前目录,如果在系统根目录下运行,所有的nohup.out日志文件会混淆
ps -ef | grep node_exporter  #检查进程的方式查看是否运行成功,如果没有运行成功就去掉nohup直接运行查看一下错误原因
1
2
3
mysqld_exporter
mysqld_exporter也是需要go的环境,安装在被监控的设备上(本文是都安装在同一台机器)

安装mysqld_exporter

wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.10.0/mysqld_exporter-0.10.0.linux-amd64.tar.gz    #下载包
tar xvf mysqld_exporter-0.10.0.linux-amd64.tar.gz -C ~/software   #解压包至指定任意目录,此处不多说
1
2
mysqld_exporter需要连接到Mysql,所以需要Mysql的权限,我们先为它创建用户并赋予所需的权限.
mysql -uroot -p密码
mysql> GRANT REPLICATION CLIENT,PROCESS ON *.* TO 'mysql_monitor'@'localhost' identified by 'mysql_monitor';
mysql> GRANT SELECT ON *.* TO 'mysql_monitor'@'localhost';
1
2
3
创建.my.cnf文件
vim ~/softwar/mysqld_exporter-0.10.0.linux-amd64/.my.cnf   #编辑.my.cnf文件,vim保存后会自动生成文件,写入如下内容
[client]
user=mysql_monitor
password=mysql_monitor
1
2
3
4
启动mysqld_exporter
cd ~/software/mysqld_exporter-0.10.0.linux-amd64   #进入解压后的文件
nohup ./mysqld_exporter -config.my-cnf=.my.cnf &    #启动mysqld_exporter并后台运行,推荐cd到目录下再运行,这样nohup的日志就会存在当前目录,如果在系统根目录下运行,所有的nohup.out日志文件会混淆
ps -ef | grep mysqld_exporter  #检查进程的方式查看是否运行成功,如果没有运行成功就去掉nohup直接运行查看一下错误原因
1
2
3
redis_exporter
安装redis_exporter
wget https://github.com/oliver006/redis_exporter/releases/download/v1.0.2/redis_exporter-v1.0.2.linux-amd64.tar.gz   #下载包
tar xvf redis_exporter-v1.0.2.linux-amd64.tar.gz -C ~/software   #解压包至指定任意目录,此处不多说
1
2
启动redis_exporter
cd ~/software/redis_exporter-v1.0.2.linux-amd64   #进入解压后的文件
nohup ./redis_exporter exporter redis://localhost:16379 &    #启动redis_exporter并后台运行,推荐cd到目录下再运行,这样nohup的日志就会存在当前目录,如果在系统根目录下运行,所有的nohup.out日志文件会混淆
ps -ef | grep redis_exporter  #检查进程的方式查看是否运行成功,如果没有运行成功就去掉nohup直接运行查看一下错误原因
1
2
3
查看prometheus配置
安装完成后,查看一下prometheus是否识别到相应监控,访问
http://localhost:9090/targets Status->Targets页面,如果可以看到Target的状态已经变成UP,就是成功

如果没有成功,建议杀掉prometheus进程,重新启动一次

安装Grafana
grafana官网有安装方式的教程 https://grafana.com/grafana/download

ubuntu安装,命令行执行如下命令

wget https://dl.grafana.com/oss/release/grafana_6.2.2_amd64.deb  #下载安装包
sudo dpkg -i grafana_6.2.2_amd64.deb  #安装
sudo service grafana-server start  #启动grafana
1
2
3
启动后,访问本地链接 http://localhost:3000/login ,默认用户名“admin”默认密码“admin”,登录后重置密码。

Grafana图形化
配置grafana-prometheus
添加data sources,点击添加选择prometheus即可


添加后配置相关信息即可,写入prometheus的URL,点击“Save&Test”提示绿色成功即可


配置grafana-node_exporter仪表版
导入Prometheus仪表版,Dashboards–Manage–import

在 Granfana.com-Dashboard中填写8919,点击load即可。(https://grafana.com/dashboards 中可以直接搜索prometheus,copy ID to Clipboard,grafana官网提供了大量的仪表板模板可以使用)


修改仪表版名称和选择“prometheus_111”为Prometheus即可(如果这里提示没有数据库,就是前面的data sources没有添加好需要重新检查)


进入仪表板就可以在仪表版看到相应的监控


仪表板中有一个提示“Panel plugin not found: grafana-piechart-panel”,则grafana安装饼图插件既可以了

sudo grafana-cli plugins install grafana-piechart-panel  #grafana安装饼图插件
sudo service grafana-server restart  #重启grafana即可
1
2


配置grafana-mysqld_exporter仪表版
导入Prometheus仪表版,Dashboards–Manage–import。方式同上
在 Granfana.com-Dashboard中填写7362,点击load即可。(https://grafana.com/dashboards 中可以直接搜索MySQL Overview,copy ID to Clipboard,grafana官网提供了大量的仪表板模板可以使用)。方式同上
修改仪表版名称和选择“prometheus”为Prometheus即可(如果这里提示没有数据库,就是前面的data sources没有添加好需要重新检查)

进入仪表板就可以在仪表版看到相应的监控

配置grafana-redis_exporter仪表版
导入Prometheus仪表版,Dashboards–Manage–import

在 Granfana.com-Dashboard中填写2751,点击load即可。(https://grafana.com/dashboards 中可以直接搜索Prometheus Redis,copy ID to Clipboard,grafana官网提供了大量的仪表板模板可以使用)

修改仪表版名称和选择“prom”为Prometheus即可(如果这里提示没有数据库,就是前面的data sources没有添加好需要重新检查)


进入仪表板就可以在仪表版看到相应的监控(本机并未安装redis所以为空)


Altermanager监控告警
首先配置邮件服务
sudo apt-get install sendmail  # 安装邮件发送服务
vim /etc/grafana/grafana.ini  # 添加邮件配置,如下图
sudo service grafana-server restart  # 重启grafana服务
1
2
3

2. 配置grafana邮件
填写收件邮箱即可,点击send test可以测试邮件发送,成功会有如图绿色提示。

邮箱收到测试邮件

3. altermanager介绍

实现prometheus的告警,需要通过altermanager这个组件;在prometheus服务端写告警规则,在altermanager组件配置邮箱

Alertmanager与Prometheus是相互分离的两个组件。Prometheus服务器根据报警规则将警报发送给Alertmanager,然后Alertmanager将silencing、inhibition、aggregation等消息通过电子邮件、dingtalk和HipChat发送通知。

Alertmanager处理由例如Prometheus服务器等客户端发来的警报。它负责删除重复数据、分组,并将警报通过路由发送到正确的接收器,比如电子邮件、Slack、dingtalk等。Alertmanager还支持groups,silencing和警报抑制的机制。

安装altermanager
wget https://github.com/prometheus/alertmanager/releases/download/v0.19.0/alertmanager-0.19.0.linux-amd64.tar.gz  # 下载altermanager
tar xvf alertmanager-0.19.0.linux-amd64.tar.gz -C ~/software  #解压至指定文件夹
vim ~/software/alertmanager-0.19.0.linux-amd64/altermanager.yml  # altermanager配置邮箱,如下
nohup ./alertmanager --config.file=alertmanager.yml  &  # 根据配置启动altermanager
1
2
3
4
(最好是用QQ邮箱!本人亲试公司邮箱host不可用,总是报错TLS证书问题。
QQ邮箱服务器smtp@qq.com:465 ,smtp_require_tls一定要改为false,QQ邮箱不支持。
同时smtp_auth_password填写的是第三方登录 QQ 邮箱的授权码,非 QQ 账户登录密码。
获取方式在 QQ 邮箱服务端设置开启 POP3/SMTP 服务时会提示)
真的很坑爹

5. 修改prometheus配置文件

vim ~/software/prometheus-2.3.0.linux-amd64/prometheus.yml  # 修改prometheus配置文件
# 修改如下(规则文件名根据自定义配置, rule_files可以指定多个规则)
1
2

6. 编写规则文件
规则文件有标准的语法需要注意,以下为样例(从别人那里复制来的):

vim ~/software/prometheus-2.3.0.linux-amd64/rules.yml  # 创建并编写规则文件(要求与配置中名称一致)
1
groups:
    - name: test-rules
      rules:
      - alert: InstanceDown
        expr: up == 0
        for: 2m
        labels:
          status: warning
        annotations:
          summary: "{{$labels.instance}}: has been down"
          description: "{{$labels.instance}}: job {{$labels.job}} has been down"
    - name: base-monitor-rule
      rules:
      - alert: NodeCpuUsage
        expr: (100 - (avg by (instance) (rate(node_cpu{job=~".*",mode="idle"}[2m])) * 100)) > 99
        for: 15m
        labels:
          service_name: test
          level: warning
        annotations:
          description: "{{$labels.instance}}: CPU usage is above 99% (current value is: {{ $value }}"
      - alert: NodeMemUsage
        expr: avg by  (instance) ((1- (node_memory_MemFree{} + node_memory_Buffers{} + node_memory_Cached{})/node_memory_MemTotal{}) * 100) > 90
        for: 15m
        labels:
          service_name: test
          level: warning
        annotations:
          description: "{{$labels.instance}}: MEM usage is above 90% (current value is: {{ $value }}"
      - alert: NodeDiskUsage
        expr: (1 - node_filesystem_free{fstype!="rootfs",mountpoint!="",mountpoint!~"/(run|var|sys|dev).*"} / node_filesystem_size) * 100 > 80
        for: 2m
        labels:
          service_name: test
          level: warning
        annotations:
          description: "{{$labels.instance}}: Disk usage is above 80% (current value is: {{ $value }}"
      - alert: NodeFDUsage
        expr: avg by (instance) (node_filefd_allocated{} / node_filefd_maximum{}) * 100 > 80
        for: 2m
        labels:
          service_name: test
          level: warning
        annotations:
          description: "{{$labels.instance}}: File Descriptor usage is above 80% (current value is: {{ $value }}"
      - alert: NodeLoad15
        expr: avg by (instance) (node_load15{}) > 100
        for: 2m
        labels:
          service_name: test
          level: warning
        annotations:
          description: "{{$labels.instance}}: Load15 is above 100 (current value is: {{ $value }}"
      - alert: NodeAgentStatus
        expr: avg by (instance) (up{}) == 0
        for: 2m
        labels:
          service_name: test
          level: warning
        annotations:
          description: "{{$labels.instance}}: Node Agent is down (current value is: {{ $value }}"
      - alert: NodeProcsBlocked
        expr: avg by (instance) (node_procs_blocked{}) > 100
        for: 2m
        labels:
          service_name: test
          level: warning
        annotations:
          description: "{{$labels.instance}}: Node Blocked Procs detected!(current value is: {{ $value }}"
      - alert: NodeTransmitRate
        expr:  avg by (instance) (floor(irate(node_network_transmit_bytes{device="eth0"}[2m]) / 1024 / 1024)) > 100
        for: 2m
        labels:
          service_name: test
          level: warning
        annotations:
          description: "{{$labels.instance}}: Node Transmit Rate  is above 100MB/s (current value is: {{ $value }}"
      - alert: NodeReceiveRate
        expr:  avg by (instance) (floor(irate(node_network_receive_bytes{device="eth0"}[2m]) / 1024 / 1024)) > 100
        for: 2m
        labels:
          service_name: test
          level: warning
        annotations:
          description: "{{$labels.instance}}: Node Receive Rate  is above 100MB/s (current value is: {{ $value }}"
      - alert: NodeDiskReadRate
        expr: avg by (instance) (floor(irate(node_disk_bytes_read{}[2m]) / 1024 / 1024)) > 50
        for: 2m
        labels:
          service_name: test
          level: warning
        annotations:
          description: "{{$labels.instance}}: Node Disk Read Rate is above 50MB/s (current value is: {{ $value }}"
      - alert: NodeDiskWriteRate
        expr: avg by (instance) (floor(irate(node_disk_bytes_written{}[2m]) / 1024 / 1024)) > 50
        for: 2m
        labels:
          service_name: test
          level: warning
        annotations:
          description: "{{$labels.instance}}: Node Disk Write Rate is above 50MB/s (current value is: {{ $value }}"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
重启prometheus并查看规则
ps -ef | grep prometheus  # 查看prometheus进程
kill  xxx  # 杀掉prometheus进程
nohup ./prometheus --config.file=prometheus.yml &  # 启动prometheus
1
2
3
访问http://loalhost:9090/alerts ,即可查看规则

8. 查看报错邮件
报警邮件如下:

9. 其他配置
可以配置企业版微信、钉钉进行推送,后面再研究

总结
Prometheus对k8集群+docker+kubernetes的运行环境支持跟多种监控,各种Exporter+Prometheus+Grafana,通过各种export采集不同维度的监控指标,并通过Prometheus支持的数据格式暴露出来,Prometheus定期pull数据并用Grafana展示,异常情况使用AlertManager告警。

更多配置可以参考 https://blog.csdn.net/liukuan73/article/details/78881008 、
https://blog.csdn.net/aixiaoyang168/article/details/98474494
————————————————
版权声明:本文为CSDN博主「小冯先生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baidu_36943075/article/details/91829364

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页