基于Prometheus搭建监控平台

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
可观测可视化 Grafana 版,10个用户账号 1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 基于Prometheus搭建监控平台

目录

前言

准备软件包:

  • prometheus:prometheus-2.22.2.linux-amd64.tar.gz
  • grafana安装包:grafana-enterprise-7.3.4-1.x86_64.rpm
  • node_report:node_exporter-1.0.1.linux-amd64.tar.gz
  • mysqld-exporter:mysqld_exporter-0.12.1.linux-amd64.tar.gz
  • alertmanager:alertmanager-0.21.0.linux-amd64.tar.gz
  • 钉钉告警插件:prometheus-webhook-dingtalk-1.4.0.linux-amd64.tar.gz

可以使用kill -HUP <prometheus's pid>的方式热加载prometheus的配置。

本文档只是简单的初步配置,不涉及高可用和微服务、容器云、日志监控。

配置server单节点

  • server节点:172.50.13.101
  • 部署位置:/usr/local/prometheus/(建议部署在/usr/local/prometheus/prometheus/目录下)
  • 配置文件:/usr/local/prometheus/prometheus.yml(建议放在/usr/local/prometheus/prometheus/目录下)
  • 监听端口:19090
  • 数据存储位置:/home/prometheus/data/(建议存放于/home/data/prometheus/目录下)
  • 数据保留时间:15天

下载prometheus压缩包并解压,二进制文件可直接运行。

prometheus.service

将prometheus设置为service,并开机自启

  1. vim /usr/lib/systemd/system/prometheus.service
  2. 文件内容见本文底部 -> 附录代码 -> prometheus.service
  3. 加载service:systemctl daemon-reload
  4. 启动:systemctl start prometheus
  5. 设置自启:systemctl enable prometheus

配置node节点

  • node节点:需要被监控的服务器
  • 部署位置:/usr/local/prometheus/node_exporter/
  • 监听端口:18080
  1. 下载node_exporter压缩包到目标服务器的部署位置
  2. vim /usr/lib/systemd/system/node_exporter.service
  3. 文件内容见本文底部 -> 附录代码 -> node_exporter.service
  4. 加载service文件:systemctl daemon-reload
  5. 启动:systemctl start node_exporter
  6. 设置自启:systemctl enable node_exporter

配置mysql监控

在数据库中添加exporter账户

  • 登录需要被监控的数据库
  • 创建用户exporter:CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'XXXXXXXX' WITH MAX_USER_CONNECTIONS 3;
  • 授权:GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
  • 刷新:flush privileges;

修改mysql_exporter的配置

添加/usr/local/prometheus/mysql_exporter/.my.cnf文件

[client]
user=exporter
password=xxxxxxxx

添加service

见附录代码中的mysql_exporter.service

相关参考资料

配置grafana

安装grafana

下载rpm安装包后直接yum安装。

添加prometheus数据源

进入grafana的web界面,添加prometheus的数据源。

导入模板

mysql主题的ID:7362

node主题ID:13105

踩坑

  • 问题1:添加mysql的exporter后,prometheus的web页面能看到mysql的监控数据,但是grafana里面添加不了prometheus的数据源
  • 解决:
  • 试试其它mysql dashboard的ID
  • 自己创建panel。
  • 原因:并没有适配Prometheus
  • 问题2:grafana中的MySQL仪表盘有部分没有数据:
  • 解决:更改node_exporter和mysql_exporter的instance为一致

官方Dashboard资源

监控告警

  • 告警服务在172.50.13.102
  • 部署位置:/usr/local/prometheus/alertmanager/
  • 数据存储路径:/home/data/prometheus/alertmanager/
  • 监听端口:18081

配置alertmanager

./alertmanager --storage.path=/home/data/prometheus/alertmanager/ --web.listen-address=:18081 --config.file=/usr/local/prometheus/alertmanager/alertmanager.yml --data.retention=120h --web.external-url=http://172.50.13.102:18081 &

  • storage.path:数据存储路径
  • web.listen-address:监听端口
  • config.file:配置文件路径
  • data.retention:数据存储保留时长
  • web.external-url:web访问的url

配置prometheus告警规则

  1. 关联alertmanager:见prometheus.yml中的alerting
  2. 指定告警规则文件的路径:见prometheus.yml中的rule_files

配置钉钉告警机器人

/usr/local/prometheus/prometheus-webhook-dingtalk/prometheus-webhook-dingtalk --ding.profile=webhook1=https://oapi.dingtalk.com/robot/send?access_token=钉钉token &

附录代码

prometheus.yml

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets: ['172.50.13.102:18081']
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"
  - "alertrules/*_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
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:19090']
  - job_name: '非生产'
    file_sd_configs:
      - files: ['/usr/local/prometheus/sd_configs/noGroup*.yml']
        refresh_interval: 10s
  - job_name: '生产mysql'
    file_sd_configs:
      - files: ['/usr/local/prometheus/sd_configs/mysql/product*.yml']
        refresh_interval: 10s
  - job_name: '非生产mysql'
    file_sd_configs:
      - files: ['/usr/local/prometheus/sd_configs/mysql/noproduct*.yml']
        refresh_interval: 10s
  - job_name: '生产服务器'
    file_sd_configs:
      - files: ['/usr/local/prometheus/sd_configs/product*.yml']
        refresh_interval: 10s
  - job_name: '物理机'
    file_sd_configs:
      - files: ['/usr/local/prometheus/sd_configs/wuli*.yml']
        refresh_interval: 10s

alertmanager.yml

global:
  resolve_timeout: 5m
route:
  group_by: [alertname]
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: webhook
receivers:
- name: webhook
  webhook_configs:
  - url: 'http://172.50.13.102:8060/dingtalk/webhook1/send'
    send_resolved: true

prometheus.service

[Unit]
Description=https://prometheus.io
Documentation=https://prometheus.io
[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus/ \
    --storage.tsdb.path=/home/prometheus/data/ \
    --config.file=/usr/local/prometheus/prometheus.yml \
    --web.listen-address=:19090 \
    --storage.tsdb.retention=15d
[Install]
WantedBy=multi-user.target

node_exporter.service

[Unit]
Description=https://prometheus.io
[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/node_exporter/node_exporter --web.listen-address 0.0.0.0:18080
[Install]
WantedBy=multi-user.target

mysql_exporter.service

[Unit]
Description=https://prometheus.io
[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/mysqld_exporter/mysqld_exporter \
  --web.listen-address 0.0.0.0:9104 \
  --config.my-cnf=/usr/local/prometheus/mysqld_exporter/.my.cnf
[Install]
WantedBy=multi-user.target

alertmanager.service

告警规则-内存、硬盘、CPU

groups:
- name: mem
  rules:
  - alert : mem
    expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes)))* 100 > 95
    for: 5m
    labels:
      severity: critical
    annotations:
      description: "{{ $labels.job }} {{ $labels.instance }} 节点的内存使用率超过95%已持续5分钟!"
      summary: "{{ $labels.instance }} 内存使用率超标! "
- name: disk
  rules:
  - alert : disk
    expr: (node_filesystem_size_bytes{fstype=~"ext.*|xfs",mountpoint !~".*pod.*"}-node_filesystem_free_bytes{fstype=~"ext.*|xfs",mountpoint !~".*pod.*"}) *100/(node_filesystem_avail_bytes {fstype=~"ext.*|xfs",mountpoint !~".*pod.*"}+(node_filesystem_size_bytes{fstype=~"ext.*|xfs",mountpoint !~".*pod.*"}-node_filesystem_free_bytes{fstype=~"ext.*|xfs",mountpoint !~".*pod.*"})) > 95
    for: 5m
    labels:
      severity: warning
    annotations:
      description: "{{ $labels.job }} {{ $labels.instance }} 节点的硬盘使用率超过95%已持续5分钟!"
      summary: "{{ $labels.instance }} 硬盘空间使用率已超过95%! "
- name: cpu
  rules:
  - alert : cpu
    expr: ((1- sum(increase(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)/sum(increase(node_cpu_seconds_total[5m])) by (instance)) * 100) >  70
    for: 5m
    labels:
      severity: warning
    annotations:
      description: "{{ $labels.job }} {{ $labels.instance }} 节点的CPU使用率超过70%已持续5分钟!"
      summary: "{{ $labels.instance }} CPU使用率已超过70! "

告警规则-主机存活

groups:
- name: UP
  rules:
  - alert : node
    expr: up == 0
    for: 1m
    labels:
      severity: critical
    annotations:
      description: "{{ $labels.job }} {{ $labels.instance }} 节点断联已超过1分钟!"
      summary: "{{ $labels.instance }} down "
相关文章
|
3月前
|
Prometheus 监控 Cloud Native
云原生监控实战:Prometheus+Grafana快速搭建指南
云原生监控实战:Prometheus+Grafana快速搭建指南
|
3月前
|
存储 Prometheus 监控
OSS监控体系搭建:Prometheus+Grafana实时监控流量、错误码、存储量(开源方案替代云监控自定义视图)
本方案基于Prometheus构建OSS监控系统,涵盖架构设计、指标采集、可视化、告警及性能优化,助力企业实现高可用、低成本的自建监控体系。
340 1
|
4月前
|
Prometheus 监控 Cloud Native
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
336 79
|
3月前
|
存储 监控 Cloud Native
云原生监控实战:Prometheus+Grafana打造RDS多维度预警体系
本方案构建了基于Prometheus与Thanos的云原生RDS监控体系,涵盖数据采集、存储、可视化与告警全流程。支持10万+QPS采集、90%存储压缩,具备&lt;30秒告警延迟能力。通过自定义指标与智能预警策略,显著提升故障发现效率,实现分钟级响应。
242 5
|
3月前
|
Prometheus 监控 Cloud Native
|
2月前
|
Prometheus 监控 Cloud Native
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务实现步骤
|
10月前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
881 3
|
6月前
|
Prometheus Kubernetes 监控
Kubernetes监控:Prometheus与AlertManager结合,配置邮件告警。
完成这些步骤之后,您就拥有了一个可以用邮件通知你的Kubernetes监控解决方案了。当然,所有的这些配置都需要相互照应,还要对你的Kubernetes集群状况有深入的了解。希望这份指南能帮助你创建出适合自己场景的监控系统,让你在首次发现问题时就能做出响应。
251 22
|
9月前
|
存储 数据采集 Prometheus
Grafana Prometheus Altermanager 监控系统
Grafana、Prometheus 和 Alertmanager 是一套强大的开源监控系统组合。Prometheus 负责数据采集与存储,Alertmanager 处理告警通知,Grafana 提供可视化界面。本文简要介绍了这套系统的安装配置流程,包括各组件的下载、安装、服务配置及开机自启设置,并提供了访问地址和重启命令。适用于希望快速搭建高效监控平台的用户。
438 20
|
9月前
|
Prometheus 监控 Cloud Native
Prometheus+Grafana监控Linux主机
通过本文的步骤,我们成功地在 Linux 主机上使用 Prometheus 和 Grafana 进行了监控配置。具体包括安装 Prometheus 和 Node Exporter,配置 Grafana 数据源,并导入预设的仪表盘来展示监控数据。通过这种方式,可以轻松实现对 Linux 主机的系统指标监控,帮助及时发现和处理潜在问题。
715 7