Prometheus+Grafana+Altermanager部署篇

  • 概述Prometheus
  • Prometheus 特点:
  • Prometheus 组成及架构:
  • 部署Prometheus
  • 部署node_exporter
  • Docker部署cAdvisor 监控主机的docker容器
  • 部署grafana
  • 安装Altermanager


概述Prometheus

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

Prometheus 特点:
  • 多维数据模型:由度量名称和键值对标识的时间序列数据
  • PromSQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询
  • 不依赖分布式存储,单个服务器节点可直接工作
  • 基于HTTP的pull方式采集时间序列数据
  • 推送时间序列数据通过PushGateway组件支持
  • 通过服务发现或静态配置发现目标
  • 多种图形模式及仪表盘支持(grafana)
Prometheus 组成及架构:

prometheus 子查询 prometheus 数据库_数据

  • Prometheus Server:收集指标和存储时间序列数据,并提供查询接口
  • ClientLibrary:客户端库
  • Push Gateway:短期存储指标数据。主要用于临时性的任务
  • Exporters:采集已有的第三方服务监控指标并暴露metrics
  • Alertmanager:告警
  • Web UI:简单的Web控制
部署Prometheus
  • Prometheus 安装在/data/prometheus 目录下,数据存储目录在/data/prometheus/data,并开启热加载,开启日志输出在/var/log/message
mkdir -p /data
wget https://github.com/prometheus/prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gz -O  /data/prometheus-2.23.0.linux-amd64.tar.gz 
tar   -xvf     /data/prometheus-2.23.0.linux-amd64.tar.gz  -C /data/
mv  /data/prometheus-2.23.0.linux-amd64 /data/prometheus
/data/prometheus/promtool check config /data/prometheus/prometheus.yml 
cat  >  /usr/lib/systemd/system/prometheus.service   <<EOF
[Unit]
Description=https://prometheus.io

[Service]
Restart=on-failure
ExecStart=/data/prometheus/prometheus  --web.enable-lifecycle  --config.file=/data/prometheus/prometheus.yml  --storage.tsdb.path=/data/prometheus/data --log.level=info --log.format=logfmt 

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl restart prometheus
systemctl enable prometheus
部署node_exporter
  • 安装收集Linux 主机的node_exporter服务
wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
tar zxf node_exporter-1.0.1.linux-amd64.tar.gz
mv node_exporter-1.0.1.linux-amd64 /usr/local/node_exporter
cat <<EOF >/usr/lib/systemd/system/node_exporter.service
[Unit]
Description=https://prometheus.io
[Service]
Restart=on-failure
ExecStart=/usr/local/node_exporter/node_exporter  --web.listen-address=:19100

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable node_exporter
systemctl restart node_exporter
Docker部署cAdvisor 监控主机的docker容器
docker run -d \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--restart=awlays \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest
部署grafana
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-6.7.2-1.x86_64.rpm
yum install grafana-enterprise-6.7.2-1.x86_64.rpm -y
systemctl daemon-reload
systemctl restart grafana-server.service
systemctl  enable grafana-server.service
  • Linux 主机监控模板:9276
  • Docker 容器监控模板:193
安装Altermanager
  • 实现prometheus的告警,需要通过altermanager这个组件;在prometheus服务端写告警规则,在altermanager组件配置邮箱、企业微信、webhook等
    Alertmanager与Prometheus是相互分离的两个组件。Prometheus服务器根据报警规则将警报发送给Alertmanager,然后Alertmanager将silencing、inhibition、aggregation等消息通过电子邮件、dingtalk和HipChat发送通知。
    Alertmanager处理由例如Prometheus服务器等客户端发来的警报。它负责删除重复数据、分组,并将警报通过路由发送到正确的接收器,比如电子邮件、Slack、dingtalk等。Alertmanager还支持groups,silencing和警报抑制的机制。
wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz  -O /data/alertmanager-0.21.0.linux-amd64.tar.gz
tar xvf  /data/alertmanager-0.21.0.linux-amd64.tar.gz -C /data
mv  /data/alertmanager-0.21.0.linux-amd64 /data/alertmanager

cat >  /usr/lib/systemd/system/alertmanager.service  << EOF
[Unit]
Description=https://alertmanager.io

[Service]
Restart=on-failure
ExecStart=/data/alertmanager/alertmanager  --config.file=/data/alertmanager/alertmanager.yml  --log.format=logfmt --log.level=info --storage.path=/data/alertmanager/data

[Install]
WantedBy=multi-user.target
EOF
/data/alertmanager/amtool check-config  /data/alertmanager/alertmanager.yml 
systemctl daemon-reload
systemctl restart alertmanager.service
systemctl  enable alertmanager.service