• 一、Prometheus集成Grafana可视化监控安装详解


    一、部署环境介绍

    主机角色

    系统版本

    IP地址

    备注

    Prometheus Server

    Grafana Server

    Alertmanager

    CentOS7.6

    172.27.30.94

    Prometheus服务器
    Grafana服务器

    Alertmanager服务

    node_exporter

    CentOS7.6

    172.27.30.92

    被监控主机

    node_exporter

    CentOS7.6

    172.27.30.85

    被监控主机

    二、Prometheus部署

    1、下载安装

    1. ###下载安装包
    2. [root@test tmp]# wget https://github.com/prometheus/prometheus/releases/download/v2.35.0-rc0/prometheus-2.35.0-rc0.linux-amd64.tar.gz[root@test tmp][root@test tmp]
    3. ###解压安装包
    4. [root@test tmp]# tar xvf prometheus-2.35.0-rc1.linux-amd64.tar.gz -C /home/
    5. [root@test home]# mv prometheus-2.35.0-rc1.linux-amd64 prometheus
    6. ###运行Prometheus
    7. #第一种方法,传统启动(更新配置需重启服务生效)
    8. [root@test prometheus]# ./prometheus --config.file=prometheus.yml
    9. #第二种方法,热加载配置(更新配置不需重启服务)
    10. [root@test prometheus]# ./prometheus --config.file=prometheus.yml --web.enable-lifecycle
    11. [root@test ~]# curl -X POST http://localhost:9090/-/reload    //更新配置后可使用此命令热加载

    2、添加系统服务,设置服务开机自启

    1. ###创建启动文件
    2. [root@test system]# vi /usr/lib/systemd/system/prometheus.service 
    3. [Unit]
    4. Description=prometheus is service
    5. [Service]
    6. Type=simple
    7. ExecStart=/home/prometheus/prometheus --config.file=/home/prometheus/prometheus.yml --web.enable-lifecycle
    8. ExecReload=/bin/kill -HUP $MAINPID
    9. KillMode=process
    10. Restart=on-failure
    11. RestartSec=42s
    12. [Install]
    13. WantedBy=multi-user.target
    14. [root@test system]# systemctl daemon-reload
    15. ###启动服务
    16. [root@test system]# systemctl restart prometheus
    17. [root@test system]# systemctl enable prometheus

    3、开启防火墙端口

    1. ###防火墙开通9090端口
    2. [root@test ~]# firewall-cmd --permanent --add-port=9090/tcp
    3. [root@test ~]# firewall-cmd --reload

    三、Prometheus登录

    1、监控指标

    默认地址:http://172.27.30.94:9090/metrics  

    2、监控界面

    默认地址:http://172.27.30.94:9090/graph  

    四、Prometheus参数配置

    1、Prometheus配置文件

    1. [root@test ~]# cat /home/prometheus/prometheus.yml 
    2. # my global config
    3. global:
    4.   scrape_interval: 15s # 默认15s 全局每次数据收集的间隔
    5.   evaluation_interval: 15s # 规则扫描时间间隔是15秒,默认不填写是 1分钟
    6.   #scrape_timeout: 5s    #超时时间
    7. #external_labels: # 用于外部系统标签的,不是用于metrics(度量)数据
    8.   # scrape_timeout is set to the global default (10s).
    9. # Alertmanager configuration
    10. alerting:
    11.   alertmanagers:
    12.     - static_configs:
    13.         - targets:
    14.           # - alertmanager:9093
    15. # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
    16. rule_files:
    17.   # - "first_rules.yml"
    18.   # - "second_rules.yml"
    19. # A scrape configuration containing exactly one endpoint to scrape:
    20. # Here it's Prometheus itself.
    21. scrape_configs:
    22.   # The job name is added as a label `job=` to any timeseries scraped from this config.
    23.   - job_name: "prometheus"  //任务目标名,可以理解成分组,每个分组包含具体的target组员
    24.     # metrics_path defaults to '/metrics' //抓取路径,默认/metrics
    25.     # scheme defaults to 'http'.
    26.     static_configs:
    27.       - targets: ["localhost:9090"]
    28. [root@test ~]

    global:  全局配置(如果有内部单独设定,会覆盖这个参数)
    alerting: 告警插件定义。主要是指定prometheus将报警规则推送到指定的alertManager实例地址rule_files: 告警规则。 按照设定参数进行扫描加载,用于自定义报警规则,其报警媒介和route路由由alertmanager插件实现。
    scrape_configs:采集配置。配置数据源,包含分组job_name以及具体target。又分为静态配置和服务发现。prometheus的数据采集通过此片段配置
    remote_writer:指定后端的存储的写入地址
    remote_reader:指定后端的存储的读取api地址。

    2、数据存储流程

    Prometheus运行后会生成“data”目录,Prometheus内存和硬盘都是以为KB为单位分块存储的。

    在Prometheus的世界中,无论是内存还是磁盘,它都是以1KB单位分成块来操作的。

    整体流程是 抓取数据 -> 写到head chunk,写满1KB,就再生成新的块,完成的块,是不可再变更的 -> 根据配置文件的设置,有一部份chunk会被保留在内存里,按照LRU算法,定期将块写进磁盘文件内。

    1. [root@test prometheus]# tree /home/prometheus/data/
    2. /home/prometheus/data/
    3. ├── chunks_head
    4. │   └── 000001
    5. ├── queries.active
    6. └── wal
    7.     ├── 00000000
    8.     ├── 00000001
    9.     └── 00000002
    10. 2 directories, 5 files

    五、安装监控节点

    1、node_exporter安装配置

            Node-exporter 可以采集机器(物理机、虚拟机、云主机)的监控指标数据,能够采集到的指标包括cpu、内存、磁盘、网络、文件数等信息。

    1. ###下载node_exporter包
    2. [root@node ~]#wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
    3. [root@node ~]# tar xvf node_exporter-1.3.1.linux-amd64.tar.gz -C /home/
    4. [root@node ~]# mv /home/node_exporter-1.3.1.linux-amd64 /home/node_exporter
    5. ###创建node_exporter启动文件
    6. [root@node ~]# vi /usr/lib/systemd/system/node_exporter.service
    7. [Unit]
    8. Description=prometheus node_exporter
    9. [Service]
    10. Type=simple
    11. ExecStart=/home/node_exporter/node_exporter
    12. ExecReload=/bin/kill -HUP $MAINPID
    13. KillMode=process
    14. Restart=on-failure
    15. RestartSec=42s
    16. MemoryLimit=300M //内存最大占用300M
    17. CPUQuota=100% //最多占用一个CPU线程
    18. [Install]
    19. WantedBy=multi-user.target
    20. "/usr/lib/systemd/system/node_exporter.service" [New] 15L, 266C written
    21. ####重新加载启动文件目录,并设置开机自启
    22. [root@node ~]# systemctl daemon-reload
    23. [root@node ~]# systemctl start node_exporter
    24. [root@node ~]# systemctl enable node_exporter

    注意:被控节点防火墙需要放通9100端口

    2、Prometheus添加node_exporter节点

    1. [root@test node_exporter]# vi /home/prometheus/prometheus.yml 
    2.   - job_name: "agent"
    3.     static_configs:
    4.       - targets: ["172.27.30.92:9100","172.27.30.85:9100"
    5. [root@test node_exporter]# curl -X POST http://172.27.30.94:9090/-/reload

    3、查看已监听主机

    登录Prometheus,在Targets下可查看已监听到的主机

    六、Grafana部署

    1、下载安装

            Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。

    1. ###官网下载较慢,在清华镜像站下载
    2. [root@test ~]# wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/grafana-8.4.6-1.x86_64.rpm
    3. ###安装grafana
    4. [root@test ~]# yum localinstall -y grafana-8.4.6-1.x86_64.rpm

    2、添加系统服务

    1. ###启动grafana,设置开机自启
    2. [root@test ~]# systemctl start grafana-server
    3. Warning: grafana-server.service changed on disk. Run 'systemctl daemon-reload' to reload units.
    4. [root@test ~]# systemctl enable grafana-server

    3、开启防火墙端口

    1. ###开通防火墙3000端口
    2. [root@test ~]# firewall-cmd --permanent --add-port=9100/tcp

    七、Grafana登录

    grafana默认登录的管理员账号密码都是:admin  默认端口3000

    八、Prometheus集成Grafana可视化监控

    1、创建数据源

    Home——DATA SOURCE

    添加配置Prometheus数据源,修改Prometheus的URL,保存提交

    2、导入监控面板

    Grafana 官方和社区对已经做好了常用的 DashBoard,可以在官网通过下载json文件或copy id将其导入到自己grafana面板。(熟练后可以自己创建编辑模板)

    官网:Dashboards | Grafana Labs 

    选择Prometheus数据源,根据需求搜索相关模板

    复制DashBoard模板id

    通过Grafana + 图标导入(import)。输入复制的DashBoard模板id,选择数据源保存即可。

    3、导入完成

    九、alertmanager安装配置

    1、Alertmanager介绍

    Alertmanager是Prometheus的一个报警通知组件,需要结合Prometheus使用。Prometheus将监测到的异常事件发送给Alertmanager,Alertmanager发送异常事件的通知(邮件、钉钉、微信等)。

    prometheus触发一条告警的过程:

            prometheus—>触发阈值—>超出持续时间—>alertmanager—>分组|抑制|静默—>媒体类型—>邮件|钉钉|微信等。

    Alert的三种状态:

    pending:警报被激活,但是低于配置的持续时间。这里的持续时间即rule里的FOR字段设置的时间。改状态下不发送报警。

    firing:警报已被激活,而且超出设置的持续时间。该状态下发送报警。

    inactive:既不是pending也不是firing的时候状态变为inactive

    2、下载安装 

    1. [root@test ~]# wget https://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.tar.gz
    2. [root@test ~]# tar xvf alertmanager-0.24.0.linux-amd64.tar.gz -C /home/
    3. [root@test ~]# mv /home/alertmanager-0.24.0.linux-amd64 /home/alertmanager
    4. [root@test ~]# /home/alertmanager/alertmanager --version
    5. alertmanager, version 0.24.0 (branch: HEAD, revision: f484b17fa3c583ed1b2c8bbcec20ba1db2aa5f11)
    6.   build user:       root@265f14f5c6fc
    7.   build date:       20220325-09:31:33
    8.   go version:       go1.17.8
    9.   platform:         linux/amd64

    3、配置alertmanager告警方式(邮箱、钉钉、微信)

    配置邮箱告警

    1. ### global:全局配置,主要配置告警方式,如邮件、webhook等。
    2. [root@grafana home]# cat /home/alertmanager/alertmanager.yml
    3. global:
    4.   resolve_timeout: 5m //处理超时,默认5min
    5.   smtp_smarthost: 'smtp.ssitg.com:25' //邮件发送服务器
    6.   smtp_from: 'jifang@ssitg.com' //邮件发送地址
    7.   smtp_auth_username: 'jifang@ssitg.com' //邮件发送地址用户名
    8.   smtp_auth_password: 'Qwer.com123' //邮件发送地址密码
    9.   smtp_require_tls: false  //是否使用 tls,根据环境不同,来选择开启和关闭。
    10. templates: //告警模板位置
    11.   - '*.tmp'
    12. ###路由分组
    13. route: //设置报警的分发策略
    14.   group_by: ['alertname'] //用于分组聚合,对告警通知按标签(label)进行分组
    15.   group_wait: 30s  //在组内等待所配置的时间,如果同组内30秒内出现相同报警,在一个组内出现。
    16.   group_interval: 5m //如果组内内容不变化,合并为一条警报信息,5m后发送。
    17.   repeat_interval: 1h //发送报警间隔,如果指定时间内没有修复,则重新发送报警。
    18.   receiver: 'email'   //配置告警消息接收者,与下面配置的对应。例如常用的 email、wechat、slack、webhook 等消息通知方式。
    19. receivers:   //配置报警信息接收者信息
    20.   - name: 'email'
    21.     email_configs:
    22.     - to: '{{ template "email.to" . }}' //接收警报的email(调用模板文件中的)
    23.       html: '{{ template "email.to.html" . }}'  //发送邮件的内容(调用模板文件中的)
    24.       send_resolved: true  //故障恢复后通知
    25. inhibit_rules: // 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)
    26.   - source_match: //源标签警报触发时抑制含有目标标签的警报,在当前警报匹配 status: 'High'
    27.       severity: 'critical'
    28.     target_match:
    29.       severity: 'warning'  //目标标签值正则匹配,可以是正则表达式如: ".*MySQL.*"
    30.     equal: ['alertname''dev''instance']  // 确保这个配置下的标签内容相同才会抑制,也就是说警报中必须有这三个标签值才会被抑制。

    创建邮箱模板

    1. ###创建邮箱模板配置
    2. [root@grafana home]# vi /home/alertmanager/alert.tmp
    3. {{ define "email.from" }}jifang@ssitg.com{{ end }}
    4. {{ define "email.to" }}licl@ssitg.com{{ end }}
    5. {{ define "email.to.html" }}
    6. {{ range .Alerts }}
    7. =========start==========
    8. 告警程序: prometheus_alert 
    9. 告警级别: {{ .Labels.severity }} 级 
    10. 告警类型: {{ .Labels.alertname }} 
    11. 故障主机: {{ .Labels.instance }} 
    12. 告警主题: {{ .Annotations.summary }} 
    13. 告警详情: {{ .Annotations.description }} 
    14. 触发时间: {{ .StartsAt.Format "2019-08-04 16:58:15" }} 
    15. =========end==========
    16. {{ end }}
    17. {{ end }}

    4、使用amtool检查配置

    1. [root@test alertmanager]# /home/alertmanager/amtool check-config  /home/alertmanager/alertmanager.yml
    2. Checking '/home/alertmanager/alertmanager.yml'  SUCCESS
    3. Found:
    4.  - global config
    5.  - route
    6.  - 1 inhibit rules
    7.  - 1 receivers
    8.  - 1 templates
    9.   SUCCESS
    10. [root@test alertmanager]

    5、添加系统服务

    1. ###创建启动文件
    2. [root@test system]# vi /usr/lib/systemd/system/alertmanager.service 
    3. [Unit]
    4. Description=alertmanager is service
    5. [Service]
    6. Type=simple
    7. ExecStart=/home/alertmanager/alertmanager --config.file=/home/alertmanager/alertmanager.yml
    8. ExecReload=/bin/kill -HUP $MAINPID
    9. KillMode=process
    10. Restart=on-failure
    11. RestartSec=42s
    12. [Install]
    13. WantedBy=multi-user.target
    14. [root@test system]# systemctl daemon-reload
    15. ###启动服务
    16. [root@test system]# systemctl restart prometheus
    17. [root@test system]# systemctl enable prometheus

    6、Alertmanager登录

    默认地址:http://172.27.30.94:9093

    7、Prometheus配置

    修改Prometheus配置文件

    1. ###配置Prometheus配置文件
    2. [root@grafana ~]# vi /home/prometheus/prometheus.yml
    3. # Alertmanager configuration
    4. alerting:
    5.   alertmanagers:
    6.     - static_configs:
    7.         - targets:
    8.             - 172.27.30.94:9093  //指定Alertmanager 的地址
    9. rule_files:   //指定报警规则文件
    10.     - rules/*.yml
    11.  ###重新加载Prometheus配置
    12. [root@grafana ~]# curl -X POST http://localhost:9090/-/reload

    创建报警规则

    1. ###编辑报警规则文件
    2. [root@grafana ~]# mkdir /home/prometheus/rules
    3. [root@grafana ~]# vi /home/prometheus/rules/node_alived.yml
    4. groups:
    5. - name: 实例存活告警规则
    6.   rules:
    7.   - alert: 实例存活告警
    8.     expr: up == 0
    9.     for: 1m
    10.     labels:
    11.       user: prometheus
    12.       severity: warning
    13.     annotations:
    14.       summary: "主机宕机 !!!"
    15.       description: "该实例主机已经宕机超过一分钟了。"
    16. - name: 内存报警规则
    17.   rules:
    18.   - alert: 内存使用率告警
    19.     expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 80
    20.     for: 1m
    21.     labels:
    22.       severity: warning
    23.     annotations:
    24.       summary: "服务器可用内存不足。"
    25.       description: "内存使用率已超过80%(当前值:{{ $value }}%)"
    26. - name: CPU报警规则
    27.   rules:
    28.   - alert: CPU使用率告警
    29.     expr: 100 - (avg by (instance)(irate(node_cpu_seconds_total{mode="idle"}[1m]) )) * 100 > 80
    30.     for: 1m
    31.     labels:
    32.       severity: warning
    33.     annotations:
    34.       summary: "CPU使用率正在飙升。"
    35.       description: "CPU使用率超过80%(当前值:{{ $value }}%)"
    36. - name: 磁盘使用率报警规则
    37.   rules:
    38.   - alert: 磁盘使用率告警
    39.     expr: 100 - node_filesystem_free_bytes{fstype=~"xfs|ext4"} / node_filesystem_size_bytes{fstype=~"xfs|ext4"} * 100 > 80
    40.     for: 20m
    41.     labels:
    42.       severity: warning
    43.     annotations:
    44.       summary: "硬盘分区使用率过高"
    45.       description: "分区使用大于80%(当前值:{{ $value }}%)"
    46.  
    47.  ###重新加载配置文件
    48.  [root@grafana ~]# curl -X POST http://localhost:9090/-/reload

    8、检查告警配置

    登陆prometheus的UI界面,查看Alerts规则

    模拟服务器宕机

  • 相关阅读:
    web.xml中Servlet中init-param的作用说明
    信息化发展27
    【Netty】1-3. Netty急速入门 - 编码实现(java)
    Maven的安装、配置以及在Eclipse中安装maven插件
    计算机操作系统(持续学习中)
    五、yolov8 tensorRT c++部署及接口封装(保姆级教程&附源码)
    植物大战 继承——C++
    哈希表题目:快乐数
    medsam ,数入xml +img, 根据检测框,原图显示分割效果,加上点的减少处理
    Mysql--索引分类
  • 原文地址:https://blog.csdn.net/yeqinghanwu/article/details/126370216