Prometheus+Grafana+Alertmanager搭建(Docker)

工作流程图

在这里插入图片描述

服务简介

Prometheus简介

普罗米修斯是一个开源系统 最初在 SoundCloud 上构建的监控和警报工具包。Prometheus
收集其指标并将其存储为时间序列数据,即指标信息与记录它的时间戳一起存储,以及称为标签的可选键值对。
特征:

  • 具有由指标名称和键/值对标识的时间序列数据的多维数据模型
  • PromQL,一种灵活的查询语言,可利用此维度
  • 不依赖分布式存储;单服务器节点是自治的
  • 时序收集通过 HTTP 上的拉取模型进行
  • 通过中间网关支持推送时间序列
  • 通过服务发现或静态配置发现目标
  • 多种图形和仪表板支持模式

Grafana简介

Grafana
允许您查询、可视化、提醒和了解您的指标,无论它们存储在何处。创建、探索并与团队共享精美的仪表板,并培养数据驱动型文化,简单来说Grafana是一个可视化的指标展示工具,可通过各种炫酷的视图进行各种数据的展示。

Alertmanager

Alertmanager 主要用于接收Prometheus
发送的告警信息,它支持丰富的告警通知渠道,而且很容易做到告警信息进行分组、静默、抑制等,是Prometheus生态中非常重要的一个核心模块。
Prometheus服务器中的警报规则向Alertmanager发送告警。
Alertmanager 管理这些告警,对这些告警进行分组去重,根据理由规则发送到接受者,比如发送电子邮件、呼叫通知系统,以及即时通讯平台。

搭建服务

Prometheus

1.编写YML文件
vim /data/monitor/docker-compose-prometheus.yml

version: '3.2'
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    restart: unless-stopped
    ports:
      - 39090:9090
    user: '0'
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'      #指定配置文件
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'
      - '--storage.tsdb.path=/prometheus/data'             #指定数据存储位置
      - '--storage.tsdb.retention=31d'                     #指定数据存储天数
      - '--web.listen-address="0.0.0.0:9090"'              #指定监听地址及端口
      - '--web.external-url=prometheus'                    #指定web访问路径
      - '--web.read-timeout=5m'                            #超时时间(超时读取请求和关闭空闲连接之前的最长持续时间。) 
      - '--web.max-connections=20'                         #设置最大连接数(同时连接的最大数量)
      - '--web.enable-lifecycle'
    volumes:
      - /etc/localtime:/etc/localtime
      - /data/monitor/config/prometheus/:/etc/prometheus
      - /data/monitor/data/prometheus/:/prometheus/data

2.编写prometheus主配文件
vim /data/monitor/config/prometheus/prometheus.yml

###################全局配置#########################
global:
  scrape_interval: 1m        #全局默认的数据拉取间隔(默认1m)
  scrape_timeout: 10s        #全局默认的单次数据拉取超时时间(默认10s)
  evaluation_interval: 1m    #全局默认的规则(主要是报警规则)拉取间隔(默认1m)
###################源数据配置#######################
scrape_configs:
  - job_name: 'node_exporter'
    scrape_interval: 5s
    metrics_path: '/metrics'
    file_sd_configs:        #通过文件获取target信息
    - files:
      - 'modules/node.yml'   #配置文件路径(需在主配同级创建 modules/obc.yml)
      refresh_interval: 5s  #target指标拉取间隔时长
#############################告警规则配置#############################
rule_files:
- "roles/*.yml"   #告警配置文件位置
#############################alerting告警配置#########################
alerting:
  alertmanagers:       #告警名称
  - scheme: http       #消息发送方式
    static_configs:    #alertmanager地址配置
    - targets:
      - "127.0.0.1:39093"

3.编写prometheus的节点配置文件
vim /data/monitor/config/prometheus/modules/node.yml

#  测试数据
- labels:
    service: "test"           #设置模块标签
    pingtai: "test"           #设置模块标签
  targets:
  - 127.0.0.1:39100           #设置模块地址

4.编写prometheus告警文件
vim /data/monitor/config/prometheus/roles/test.yml

groups:                                #设置告警组
- name: 测试平台                       #告警组名称
  rules:
  - alert: 服务状态					    #规则名称
    expr: up{
    
    service="cc",job=~".*"} == 0     #告警触发条件
    for: 5s                                   #告警检测间隔
    labels:
      severity: ERROR                         #告警携带标签
      pingtai: "测试平台"
    annotations:                              #设置自定义告警信息
      summary: "{
    
    { $labels.job }}模块 "        #告警信息一
      description: "业务模块异常停止-模块 [{
    
    { $labels.job }}]异常停止超过1分钟。"  #告警信息2
      value: "{
    
    { $value }}"    #用于记录当前指标值

5.启动服务

docker-compose -f /data/monitor/docker-compose-prometheus.yml up -d
Grafana

1.编写YML文件
vim /data/monitor/docker-compose-grafana.yml

version: '3.2'
services:
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: unless-stopped
    ports:
      - 33000:3000
    user: '0'
    volumes:
      - /data/monitor/data/grafana/:/var/lib/grafana
      - /data/monitor/data/grafana/provisioning/:/etc/grafana/provisioning/
    environment:
      - GF_SECURITY_ADMIN_USER=admin             #设置管理员用户名
      - GF_SECURITY_ADMIN_PASSWORD=admin        #设置管理员密码
      - GF_USERS_ALLOW_SIGN_UP=false
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_EXPLORE_ENABLED=true
      - GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer
      - GF_AUTH_OAUTH_AUTO_LOGIN=true
      - GF_SMTP_ENABLED=true
      - GF_SMTP_HOST=smtp.exmail.qq.com:465     #设置SMTP发送信息
      - [email protected]
      - GF_SMTP_PASSWORD=123456
      - [email protected]

2.启动服务

docker-compose -f /data/monitor/docker-compose-grafana.yml up -d
Alertmanager

1.编写YML文件
vim /data/monitor/docker-compose-alertmanager.yml

version: '3.2'
services:
  alertmanager:
    image: prom/alertmanager:latest
    container_name: alertmanager
    restart: unless-stopped
    ports:
      - 39093:9093
      - 39094:9094
    user: '0'
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /data/monitor/data/alertmanager/:/alertmanager
      - /data/monitor/config/alertmanager/:/etc/alertmanager
    command:
      - '--config.file=/etc/alertmanager/alertmanager.yml'
      - '--storage.path=/alertmanager

2.编写alertmanager配置文件
vim /data/monitor/config/alertmanager/alertmanager.yml

########################全局配置##########################
global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.qq.cn:465'          #设置邮件发送服务器地址
  smtp_from: '[email protected]'                   #设置发件人
  smtp_auth_username: '[email protected]'          #设置发件人
  smtp_auth_password: 'cbxxxxxxxxxxxxxx'    #设置发件人密码
  smtp_require_tls: false                   #是否启用TLS加密
#####################告警模板配置########################
templates:
  - 'template/*.tmpl'                       #设置告警模板位置
####################告警路由配置#########################
route:
  group_by: ['alertname']
  group_wait: 5m
  group_interval: 5m
  repeat_interval: 6h
  receiver: 'yunwei'                     #路由组名称
  routes:
##########设置自定义路由规则
#  - receiver: 'server-ERR'               #路由名称
#    group_wait: 30s                      #发送间隔
#    continue: true
#    match_re:
#      severity: "ERR"        #匹配prometheus的标签
####################告警发送配置########################
receivers:
 - name: 'yunwei'                                   #匹配路由组名称
    email_configs:
    - to: '[email protected]'                                  #收件人
      html: '{
    
    { template "mail.html" . }}'              #设置发送模板
      headers: {
    
     Subject: "[WARN] 服务异常-测试平台"}     #邮件标题
      send_resolved: true
     #webhook_configs:                                   #设置webhook地址
    # - url: 'http://172.0.0.1:31100/prometheusalert?type=fs&tpl=prometheus-fsv2&fsurl=https://open.feishu.cn/open-apis/bot/v2/hook/49b7cc23-4dff-4453-96a9-3bb80c5df704'
######################默认设置#############################
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

3.编写邮件模板
vim /data/monitor/config/alertmanager/template/mail.tmpl

{
   
   { define "mail.html" }}
    {
   
   { range .Alerts }}
【{
   
   { .Labels.alertname }}告警】<br />"{
   
   { .Labels.pingtai}}"主机:   {
   
   { .Labels.instance }} 于 {
   
   { .StartsAt.Local.Format "2006-01-02 15:04:05" }} 触发告警,告警模块:  [{
   
   { .Labels.job }}],当前值:{
   
   { .Annotations.value }} 详细信息: {
   
   { .Annotations.description }}
<br />
    {
   
   { end }}
{
   
   { end }}

4.启动模块

docker-compose -f /data/monitor/docker-compose-alertmanager.yml up -d
告警展示
  • prometheus触发告警
    在这里插入图片描述
  • alertmanager收到告警发送请求
    在这里插入图片描述
  • 邮件发送
    在这里插入图片描述

Grafana接入prometheus

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  • 附上prometheus多种配置方式
###################全局配置#########################
global:
  scrape_interval: 1m        #全局默认的数据拉取间隔(默认1m)
  scrape_timeout: 10s        #全局默认的单次数据拉取超时时间(默认10s)
  evaluation_interval: 1m    #全局默认的规则(主要是报警规则)拉取间隔(默认1m)
###################源数据配置#######################
##方法一:
scrape_configs:
  - job_name: 'xxx'        #配置模块名称
    scrape_interval: 5s    #刷新时间
    metrics_path: '/'   #自定义节点访问URL(默认/metrics)
    static_configs:
    - targets:             #配置节点信息(可通过配置多个targets进行项目及环境区分)
      - "127.0.0.1:20002"  #配置节点地址
      labels:              #配置节点标签
        service: 'xx'      #lablename:lablevalue
        env: 'production'
##方法二:
#引入配置文件配置节点
  - job_name: 'test'
    scrape_interval: 5s
    metrics_path: '/'
    file_sd_configs:        #通过文件获取target信息
    - files:
      - 'modules/test.yml'   #配置文件路径(需在主配同级创建 modules/obc.yml)
      refresh_interval: 5s  #target文件拉取间隔时长
#配置target节点文件
vim modules/test.yml
- labels:         #配置标签
    service: "test"
    env: "production"
  targets:        #配置节点
  - 127.0.0.1:8888
#可按照此模板配置多个从而进行项目及环境区分
##方法三:
#[]配置方式
  - job_name: 'prometheus'    #job名称
    scrape_interval: 5s       #刷新时间
    metrics_path: '/pro'      #自定义URL
    static_configs:           
    - targets: ['127.0.0.1:39090']      #配置节点地址(多个节点以,隔开)
      labels:                               #配置节点标签
        service: 'cc'
        env: 'production'
#############################告警规则配置#############################
rule_files:
- "roles/*.yml"   #告警配置文件位置
#############################alerting告警配置#########################
alerting:
  alertmanagers:       #告警名称
  - scheme: http       #消息发送方式
    static_configs:    #alertmanager地址配置
    - targets:
      - "127.0.0.1:39093"

猜你喜欢

转载自blog.csdn.net/weixin_49566876/article/details/130385982