一、prometheus

1、prometheus简介

1.1、 基础架构

iredmail 监控 exporter 监控_docker

1.2、核心组件

  • prometheus:主要用于抓取数据和存储时序数据,另外还提供查询和 Alert Rule 配置管理
  • client libraries,用于对接 Prometheus Server, 可以查询和上报数据
  • push gateway ,用于批量,短期的监控数据的汇总节点,主要用于业务数据汇报等。
  • exporter:多种类型,收集不同数据,如:node-exporter等等
  • alertmanager:用于告警通知管理

1.3、主要功能

  • 一个多维数据模型,其中包含通过度量标准名称和键/值对标识的时间序列数据
  • 灵活的查询语句(PromQL)
  • 不依赖分布式存储;单服务器节点是自治的
  • 采用 http 协议,使用 pull 模式,拉取数据,简单易懂
  • 通过服务发现或静态配置发现目标
  • 支持多种统计数据模型,图形化友好。

2、prometheus搭建

安装前准备

mkdir -p /data/docker/gpe/prometheus
cd /data/docker/gpe/prometheus
mkdir -p config/conf.d
mkdir -p config/rules
mkdir data
sudo chmod 777 data

config/
├── conf.d
│   └── host.json
├── prometheus.yml
└── rules
    └── instance.yml

2.1、配置文件如下

host.json

[
  {
    "targets": ["172.17.0.1:9100"],
    "labels": {
       "instance": "host-localhost"
    }
  }
]

instance.yml

groups:
- name: example
  rules:
  - alert: InstanceDown
    expr: up == 0
    for: 1m
    labels:
       severity: page
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."

prometheus.yml
详细配置见:https://prometheus.io/docs/prometheus/latest/configuration/configuration/

global:                                 # 全局设置,可以被覆盖
  scrape_interval:     15s              # 设定抓取数据的频率,默认为1min
  evaluation_interval: 15s				# 评估规则的频率,默认为1min
  scrape_timeout: 15s 					# 设定抓取数据的超时时间,默认为10s

alerting:
 alertmanagers:
 - static_configs:
   - targets: 
      - 172.17.0.1:9093                 # # Alertmanager配置,设定alertmanager和prometheus交互的接口

rule_files:
  - '/etc/prometheus/rules/*.yml'       # 报警规则存放路径

scrape_configs:
  - job_name: prometheus
    scrape_interval: 15s 				# 抓取周期,默认采用global配置
    static_configs:
      - targets: ['172.17.0.1:9090']	# prometheus所要抓取数据的地址
        labels:							# 定义标签,便于区分
          instance: prometheus

  - job_name: pushgateway
    honor_labels: true
    static_configs:
      - targets: ['172.17.0.1:9091']
        labels:
          instance: pushgateway

  - job_name: host 
    metrics_path: '/metrics'
    file_sd_configs:  					# 基于文件的服务发现
      - files:
        - /etc/prometheus/conf.d/host.json

注意:服务自动发现使用,比如我想新加一个主机节点的监控,我只需要修改host.json文件即可,不需要重启prometheus服务

2.2、docker启动

上述配置完成后,执行下面命令启动prometheus服务

注意从 2.0 开始,热加载功能是默认关闭的,添加--web.enable-lifecycle:开启配置文件热加载,可以通过curl -X POST http://ip:port/-/reload实现

docker run -d -h 172.17.0.1 --name prometheus -p 9090:9090 \
-v /data/docker/gpe/prometheus/config/:/etc/prometheus \
-v /data/docker/gpe/prometheus/data:/prometheus/data \
prom/prometheus:v2.19.0 \
--storage.tsdb.retention.time=7d \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/prometheus/data \
--web.enable-lifecycle

2.3、简单使用

访问:http://localhost:9090,进入到如下界面

iredmail 监控 exporter 监控_hg_02


点击Alerts,可以查看开始定义好的报警规则

iredmail 监控 exporter 监控_数据_03


查看instance状态(两个down的还没有搭建)

iredmail 监控 exporter 监控_docker_04

二、node-exporter搭建

–collector.tcpstat启用TCP连接监控,其它启用见:https://github.com/prometheus/node_exporter

docker run -d --net=host --name node-exporter -p 9100:9100 \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /:/rootfs:ro \
prom/node-exporter:v1.0.0 --collector.tcpstat

访问:http://localhost:9100/metrics

三、pushgateway和alertmanager

1、pushgateway搭建

docker run -d -h 172.17.0.1 -p 9091:9091 --name pushgateway --restart=always prom/pushgateway:v1.2.0

访问:http://localhost:9091/

2、alertmanager搭建

以钉钉报警为例

2.1、配置

详细配置见:https://prometheus.io/docs/alerting/latest/configuration/

mkdir /data/docker/gpe/alertmanager
vim alertmanager.yml

alertmanager.yml配置如下:

global:
  resolve_timeout: 5m 		# 在没有报警的情况下声明为已解决的时间
#  # 配置邮件发送信息
#  smtp_smarthost: 'smtp.test.com:465'
#  smtp_from: 'your_email'
#  smtp_auth_username: 'your_email'
#  smtp_auth_password: 'email_passwd'
#  smtp_hello: 'your_email'
#  smtp_require_tls: false

# 设置报警的分发策略
route:
  receiver: webhook			# 发送警报的接收者的名称,默认的receiver
  group_wait: 10s			# 当一个新的报警分组被创建后,需要至少等待多久时间发送一组警报的通知
  group_interval: 1m		# 当第一个报警发送后,等待'group_interval'时间来发送新的一组报警信息
  repeat_interval: 24h 		# 报警发送成功后,重新发送等待的时间
  group_by: ['alertname']	# 报警分组依据
#  #子路由,使用email发送
#  routes: 
#  - receiver: email
#    match_re:
#      serverity : email  # label 匹配email
#    group_wait: 10s
# 定义警报接收者信息
receivers:
- name: webhook 			# 与route匹配
  webhook_configs:
  - url: http://172.17.0.1:8060/dingtalk/webhook/send
    send_resolved: true		# 发送已解决通知
 
#- name: 'email'
#  email_configs:
#  - to: 'email@qq.com'
#    send_resolved: true

# 抑制规则配置
#inhibit_rules:
#  [ - <inhibit_rule> ... ]
#target_match:
#  [ <labelname>: <labelvalue>, ... ]
#target_match_re:
#  [ <labelname>: <regex>, ... ]
#source_match:
#  [ <labelname>: <labelvalue>, ... ]
#source_match_re:
#  [ <labelname>: <regex>, ... ]
#[ equal: '[' <labelname>, ... ']' ]

2.2、docker启动

参考:https://theo.im/blog/2017/10/16/release-prometheus-alertmanager-webhook-for-dingtalk/ 注意:不同版本的镜像,消息格式可能不一样

docker run -d --name webhook-dingtalk -p 8060:8060 \
timonwong/prometheus-webhook-dingtalk:v1.4.0 \
--ding.profile="webhook=https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx"

测试CPU报警,停止node-exporter服务:

docker stop node-exporter

查看prometheus Alerts显示的状态将变为PENDING

iredmail 监控 exporter 监控_iredmail 监控_05


持续1分钟左右,状态变为FIRING,此时将消息发送至alertmanager

iredmail 监控 exporter 监控_iredmail 监控_06


查看alertmanager会显示接受到的alert信息,此时alertmanager将通过webhook转发至钉钉机器人

iredmail 监控 exporter 监控_docker_07


发送消息示例如下:

iredmail 监控 exporter 监控_docker_08


重启node-exporter服务后,将再次送一次RESOLVED信息

iredmail 监控 exporter 监控_docker_09

补充:告警信息生命周期的3中状态
  • inactive:表示当前报警信息即不是firing状态也不是pending状态
  • pending:表示在设置的阈值时间范围内被激活的
  • firing:表示超过设置的阈值时间被激活的

四、grafana

1、grafana简介

详细介绍见官方:https://grafana.com/docs/grafana/latest/

Grafana是开源的可视化和分析软件。它使您可以查询,可视化,警告和浏览指标,无论它们存储在哪里。用简单的英语,它为您提供了将时间序列数据库(TSDB)数据转换为精美的图形和可视化效果的工具。

2、grafana搭建

安装前准备

mkdir -p /data/docker/gpe/grafana
cd /data/docker/gpe/grafana
mkdir data
sudo chmod 777 data

docker启动命令如下,可以通过GF_INSTALL_PLUGINS预先安装一些指定插件

docker run -d --name grafana -p 3000:3000 \
-e GF_INSTALL_PLUGINS="grafana-piechart-panel" \
-v /data/docker/gpe/grafana/data:/var/lib/grafana \
grafana/grafana:7.0.0

3、简单使用

访问:http://localhost:3000/,默认用户密码:admin/admin,注意:生产环境一定要修改密码

iredmail 监控 exporter 监控_数据_10


添加数据源,有多个类型,选择prometheus类型,进行如下配置然后点击Save & Test,没有问题即可

iredmail 监控 exporter 监控_数据_11


iredmail 监控 exporter 监控_docker_12


去官方查找node-exporter示例模板:https://grafana.com/grafana/dashboards?orderBy=name&directinotallow=asc

导入:8919

iredmail 监控 exporter 监控_iredmail 监控_13


iredmail 监控 exporter 监控_数据_14


iredmail 监控 exporter 监控_iredmail 监控_15


最终的页面:

iredmail 监控 exporter 监控_docker_16