Prometheus、AlertManager、Grafana、exporter监控告警

| 标签 go  prometheus  alertmanager  grafana  浏览次数: -

前言

1.这篇内容主要讲实践使用为主,并不会普及太多的原理等知识。想更详细了解请访问Prometheus官网

2.操作的根目录在/home/prometheus

目录结构

tree -L 1 /home/prometheus/

/home/prometheus/
├── alertmanager
├── grafana
├── node_exporter
├── packages
└── prometheus

tree -L 1 /home/prometheus/packages/

/home/prometheus/packages/
├── alertmanager-0.8.0.linux-amd64.tar.gz
├── grafana-4.3.1.linux-x64.tar.gz
├── node_exporter-0.14.0-rc.2.linux-amd64.tar.gz
└── prometheus-1.5.2.linux-amd64.tar.gz

node_exporter

简介

用go语言实现的agent采集端,主要是负责信息的收集,提供给http请求给prometheus访问采集信息。需要部署在被采集的机器上。

安装

在github下载0.14.0版本解压即可

启动exporter

/home/prometheus/node_exporter/node_exporter -web.listen-address=:10001

AlertManager

简介

Alertmanager与Prometheus是相互分离的两个部分。Prometheus服务器根据报警规则将警报发送给Alertmanager,然后Alertmanager将silencing、inhibition、aggregation等消息通过电子邮件、PaperDuty和HipChat发送通知。

安装

在github下载0.8.0版本解压即可

使用

1.修改配置文件

vi /home/prometheus/alertmanager/alertmanager.yml

global:

 resolve_timeout: 5m

 smtp_smarthost: smtp.163.com:25 # 发送邮箱服务器
 smtp_from: xx@163.com  # 发送邮箱地址
 smtp_auth_username: xx@163.com  # 邮箱用户名
 smtp_auth_password: xx  # 密码

route:
 group_by: [alertname]
 group_wait: 5s
 repeat_interval: 1m
 group_interval: 1m
 receiver: live-monitoring

receivers:
  - name: live-monitoring
    email_configs:
    - to: 1131909224m@sina.cn  # 接收邮箱地址
      headers:
        Subject: '{{  template  "userdefine.subject" .}}'
      html: '{{ template "email.html" . }}'

templates:
  - '*.tmpl'

2.启动

/home/prometheus/alertmanager/alertmanager -config.file=/home/prometheus/alertmanager/alertmanager.yml -web.listen-address=:10012

Prometheus

简介

Prometheus是一个开源的服务监控系统,它通过HTTP协议从远程的机器收集数据并存储在本地的时序数据库上。它提供了一个简单的网页界面、一个功能强大的查询语言以及HTTP接口等等。Prometheus通过安装在远程机器上的exporter来收集监控数据。

配置Prometheus通过-alertmanager.url标志与Alertmanager通信

安装

在github下载1.5.2版本后解压即可

使用

1.创建告警规则文件目录

mkdir /home/prometheus/prometheus/rules

2.编写告警规则文件

vi /home/prometheus/prometheus/rules/test.rules

ALERT node_load5
    IF node_load5>0
    LABELS {
			severity = "warn" ,
    }
    ANNOTATIONS {

			alertname = "系统负载(5分钟)" ,

			description = "监控主机在过去5分钟内的平均负载是否超出既定范围" ,

			errorcode = "QD-S002" ,

			message = "QD-S002:系统负载达到 <span></span>" ,

			suggest = "可尝试检查应用状态是否正常,如活跃连接是否过多等" ,

    }

ALERT node_load5
    IF node_load5>5
    LABELS {
			severity = "critical" ,
    }
    ANNOTATIONS {

			alertname = "系统负载(5分钟)" ,

			description = "监控主机在过去5分钟内的平均负载是否超出既定范围" ,

			errorcode = "QD-S002" ,

			message = "QD-S002:系统负载达到 <span></span>" ,

			suggest = "可尝试检查应用状态是否正常,如活跃连接是否过多等" ,

    }

3.配置yaml文件

vi /home/prometheus/prometheus/prometheus.yml

global:
  scrape_interval:     15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: prometheus
    static_configs:
    - targets:
        - localhost:10011

  - job_name: linux
    static_configs:
      - targets:
          - 127.0.0.01:10001
        labels:
          instance: 127.0.0.1
          host: 127.0.0.1
          ip: 127.0.0.1

rule_files:
  - rules/test.rules

其中targets是我们采集的主机和端口,127.0.0.1代表agent在本机,10001代表agent提供的端口是10001

添加target有两种方式,在prometheus.yml写入则需要手动重载才生效,可以指定yaml文件地址,就不需要重载了

4.启动prometheus

prometheus存入数据会和系统时间有关,启动前先确认系统时间是否正常

/home/prometheus/prometheus/prometheus -config.file=/home/prometheus/prometheus/prometheus.yml -alertmanager.url=http://127.0.0.1:10012 -web.listen-address=:10011

  • -config.file: 指定配置文件路径
  • -alertmanager.url: alertmanager的web服务接口
  • -web.listen-address: prometheus监听接口
  • –web.external-url: 指定访问prometheus请求的格式,若不指定该项,那么运行prometheus服务的主机名将能包含 ., _ 字符

5.重载prometheus

此时如告警规则文件发生了修改,可以重载prometheus让新的告警规则生效

curl -X POST http://localhost:10011/-/reload

Grafana

简介

Grafana是一个开源的功能丰富的数据可视化平台,通常用于时序数据的可视化。它内置了以下数据源的支持:

  • cloudwatch
  • elasticsearch
  • grafana
  • grafana-live
  • graphite
  • influxdb
  • mixed
  • mysql
  • opentsdb
  • prometheus

并可以通过插件扩展支持的数据源。

安装

1.在aws下载编译好4.3.1版本

从github上下载则需要自己编译

修改配置dashbord文件路径

1.创建路径

mkdir /home/prometheus/grafana/dashboards

2.修改配置文件

vi /home/prometheus/grafana/conf/defaults.ini

[dashboards.json]
enabled = true
path = ./dashboards

可以把之前自己配置过的dashbord之前展示出来

启动

/home/prometheus/grafana/bin/grafana-server

默认使用的端口是3000

配置数据源

1.通过浏览器访问http://grafana服务器IP:/3000/login(默认用户名密码都是admin)

2.登陆后配置Data Sources,类型选择Prometheus, url则填写http://127.0.0.1:Prometheus端口

3.在Dashbords中创建新的dashbords,通过view json复制内容后存入文件中进行传递迁移

展示注意

dashbord中的查询参数会从url参数中使用var-开头的变量(若需要变量生效,则需要在 Templating 中先进行配置,否则会导致变量无法识别)

总结

  • prometheus

针对监控我们主要的操作是在修改prometheus的配置文件,prometheus做了非常多的操作,比如定时采集存取信息发送告警信息

  • alertmanager

主要的功能在收到prometheus的告警信息后,进行告警聚合邮件、webhook 发送

  • exporter

监控信息的来源,并不一定需要用go语言实现,但是go语言的exporter会比较多,而更新比较快。

  • grafana

信息的展示,不限于折线图柱图等,传统的折线图等的展示都是先由后端启动celery beat等定时异步任务,把取到的数据存入数据苦衷,然后前端发送请求从后台拿到数据通过插件(比如hcharts)进行前端的渲染,增加流程非常笨拙,易出错,而且效果也不好。grafana提供了非常友好导入、分享、编辑等机制,不需要前后端技术基础就可以完成图表的展示。


上一篇 常用排序算法简介     下一篇 IO多路复用机制
目录导航