基本概念

Prometheus

时间序列化数据库,我的理解就是将数据打上标签,以时间维度存储。后面有机会在深入研究。

Prometheus架构如下:

Grafana

Prometheus中存储的数据,通过Grafana进行图形化呈现。

Alertmanager

Alertmanager 主要用于接收 Prometheus 发送的告警信息,它支持丰富的告警通知渠道,而且很容易做到告警信息进行去重,降噪,分组,策略路由,是一款前卫的告警通知系统。

软件安装

一.Prometheus安装

1.1 Prometheus安装

1)普通安装:

prometheus安装包最新版本下载地址:

https://github.com/prometheus/prometheus/releases/download/v2.3.2/prometheus-2.3.2.linux-amd64.tar.gz

解压:tar txvf prometheus-2.3.2.linux-amd64.tar.gz

切换目录:cd prometheus-2.3.2.linux-amd64
启动:./prometheus --config.file=prometheus.yml

注:通过执行

./prometheus -h

可以查看具体得执行参数,参数后面可以查看默认得参数。如下图所示。

2)docker 方式安装(前提docker已经安装完毕)

创建目录和prometheus配置文件

mkdir /prometheus
vim /prometheus/prometheus.yml

注:对于prometheus.yml文件的配置,稍后详细介绍。

拉取prometheus镜像

docker pull prom/prometheus

启动prometheus

docker run -d -p 9090:9090 --name prometheus -v /prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml

注:参数的简要说明

a、-d选项启动独立模式下的prometheus容器,这意味着容器将在后台启动,这种情况下只有stop docker才可以关闭prometheus,而不能执行ctrl+c

b、-p选择指定端口号映射,通过访问本机的9090端口,即可访问prometheus容器的9090端口

c、--name指定容器的名称

d、-v选项建立本机文件和docker内文件的映射

e、--config.file指定运行docker内prometheus的配置文件

1.2 prometheus配置文件的设定

prometheus的配置文件采用的是yaml文件,yaml文件书写的要求如下:

大小写敏感
使用缩进表示层级关系
缩进时不允许使用Tab键,只允许使用空格。
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

prometheus.yml的样例

# Prometheus全局配置项
global:
scrape_interval: 15s # 设定抓取数据的周期,默认为1min
evaluation_interval: 15s # 设定更新rules文件的周期,默认为1min
scrape_timeout: 15s # 设定抓取数据的超时时间,默认为10s
external_labels: # 额外的属性,会添加到拉取得数据并存到数据库中
monitor: 'codelab_monitor' # Alertmanager配置
alerting:
alertmanagers:
- static_configs:
- targets: ["localhost:9093"] # 设定alertmanager和prometheus交互的接口,即alertmanager监听的ip地址和端口 # rule配置,首次读取默认加载,之后根据evaluation_interval设定的周期加载
rule_files:
- "alertmanager_rules.yml"
- "prometheus_rules.yml" # scape配置
scrape_configs:
- job_name: 'prometheus' # job_name默认写入timeseries的labels中,可以用于查询使用
scrape_interval: 15s # 抓取周期,默认采用global配置
static_configs: # 静态配置
- targets: ['localdns:9090'] # prometheus所要抓取数据的地址,即instance实例项 - job_name: 'example-random'
static_configs:
- targets: ['localhost:8080']

1.3. 通过localhost:9090端口访问,如下图所示:

安装exporter
prometheus可以理解为一个数据库+数据抓取工具,工具从各处抓来统一的数据,放入prometheus这一个时间序列数据库中。那如何保证各处的数据格式是统一的呢?就是通过这个exporter。exporter也是用GO写的程序,它开放一个http接口,对外提供格式化的数据。所以在不同的环境下,需要编写不同的exporter。好在已经有很多写好的exporter,我们可以直接使用(https://github.com/prometheus这里可以找到很多exporter)我们这里直接使用mysqld_exporter(prometheus.io/download/#mysqld_exporter)。当然也要下载对应系统的版本。

下载地址可参考:

window版本:https://github.com/prometheus/mysqld_exporter/releases/download/v0.11.0/mysqld_exporter-0.11.0.windows-amd64.tar.gz

Linux版本:https://github.com/prometheus/mysqld_exporter/releases/download/v0.11.0/mysqld_exporter-0.11.0.linux-amd64.tar.gz

解压后的内容类似如下图:

这里的mysqld_exporter是启动文件,.my.cnf是配置文件。想要正确的导出mysql的状态数据,必须在配置文件中正确的配置mysql的连接信息。我的配置如下:

配置好了,就可以启动了。成功如下所示:

通过localhost:9104,就可以看到exporter导出的数据:

在Prometheus中配置mysqld_exporter

exporter启动了,需要在Prometheus中正确的配置。修改prometheus目录中的prometheus.yml,增加配置如下:

重启prometheus,点击导航栏中的status->targets可以看到,mysql的exporter已经集成。

二.安装Grafana

2.1.安装Grafana

下载Grafana安装包:https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.3.linux-amd64.tar.gz

tar zxvf grafana-5.2.3.linux-amd64.tar.gz
cd grafana-5.2.3.linux-amd64.tar.gz
bin/grafana-server web

Grafana默认服务端口号为3000,通过浏览器对Grafana进行访问。

http://localdns:3000

默认登录名密码为"admin/admin"。

2.2 配置数据源

首先,你要添加一个数据源,将Grafana和Prometheus关联起来。点击Add data source,如下填写数据保存即可:

操作步骤如下:

1 在左侧工具栏中,点击"Configuration"菜单。
2 点击"Data Sources"。
3 点击"Add data source"。
4 数据源Type选择“Prometheus”。
5 设置Prometheus服务访问地址(例如:http://localhost:9090)。
6 调整其他想要的设置(例如:关闭代理访问)。
7 点击“Add”按钮,保存这个新数据源。

看到如下的提示,说明你的prometheus工作是正常的:

2.3 配置dashboard

接着回到首页,你需要添加一个dashboard,如下图进入dashboard导入页面:

这里你需要从https://github.com/percona/grafana-dashboards项目中的dashboards下载MySQL_Overview.json,然后通过上面页面的Upload .json File按钮上传上去,导入即可

下载地址:https://github.com/percona/grafana-dashboards/blob/master/dashboards/MySQL_Overview.json

导入成功后,你将看到监控页面。

三、Alertmanager(email报警)

Alertmanager简介及机制
Alertmanager处理由类似Prometheus服务器等客户端发来的警报,之后需要删除重复、分组,并将它们通过路由发送到正确的接收器,比如电子邮件、Slack等。Alertmanager还支持沉默和警报抑制的机制。

分组
分组是指当出现问题时,Alertmanager会收到一个单一的通知,而当系统宕机时,很有可能成百上千的警报会同时生成,这种机制在较大的中断中特别有用。

例如,当数十或数百个服务的实例在运行,网络发生故障时,有可能服务实例的一半不可达数据库。在告警规则中配置为每一个服务实例都发送警报的话,那么结果是数百警报被发送至Alertmanager。

但是作为用户只想看到单一的报警页面,同时仍然能够清楚的看到哪些实例受到影响,因此,人们通过配置Alertmanager将警报分组打包,并发送一个相对看起来紧凑的通知。

分组警报、警报时间,以及接收警报的receiver是在配置文件中通过路由树配置的。

抑制
抑制是指当警报发出后,停止重复发送由此警报引发其他错误的警报的机制。

例如,当警报被触发,通知整个集群不可达,可以配置Alertmanager忽略由该警报触发而产生的所有其他警报,这可以防止通知数百或数千与此问题不相关的其他警报。

抑制机制可以通过Alertmanager的配置文件来配置。

沉默
沉默是一种简单的特定时间静音提醒的机制。一种沉默是通过匹配器来配置,就像路由树一样。传入的警报会匹配RE,如果匹配,将不会为此警报发送通知。

沉默机制可以通过Alertmanager的Web页面进行配置。

3.1 Alertmanager安装

下载地址:https://github.com/prometheus/alertmanager/releases/download/v0.15.3/alertmanager-0.15.3.linux-amd64.tar.gz

tar -zxvf alertmanager-0.15.3.linux-amd64.tar.gz

cd alertmanager-0.15.3.linux-amd64

执行命令 mv simple.yml alertmanager.yml,并修改 alertmanager.yml 配置:

启动 ./alertmanager-config.file= alertmanager.yml #默认配置项为alertmanager.yml

注:alertmanager.yml配置文件,默认是不存在的,需要新建。

3.2 alertmanager.yml的配置

# 全局配置项
global:
resolve_timeout: 5m #处理超时时间,默认为5min
smtp_smarthost: 'smtp.sina.com:25' # 邮箱smtp服务器代理
smtp_from: '******@sina.com' # 发送邮箱名称
smtp_auth_username: '******@sina.com' # 邮箱名称
smtp_auth_password: '******' # 邮箱密码或授权码
wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/' # 企业微信地址 # 定义模板信心
templates:
- 'template/*.tmpl' # 定义路由树信息
route:
group_by: ['alertname'] # 报警分组依据
group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
group_interval: 10s # 在发送新警报前的等待时间
repeat_interval: 1m # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
receiver: 'email' # 发送警报的接收者的名称,以下receivers name的名称 # 定义警报接收者信息
receivers:
- name: 'email' # 警报
email_configs: # 邮箱配置
- to: '******@163.com' # 接收警报的email配置
html: '{{ template "test.html" . }}' # 设定邮箱的内容模板
headers: { Subject: "[WARN] 报警邮件"} # 接收邮件的标题
webhook_configs: # webhook配置
- url: 'http://127.0.0.1:5001'
send_resolved: true
wechat_configs: # 企业微信报警配置
- send_resolved: true
to_party: '1' # 接收组的id
agent_id: '1000002' # (企业微信-->自定应用-->AgentId)
corp_id: '******' # 企业信息(我的企业-->CorpId[在底部])
api_secret: '******' # 企业微信(企业微信-->自定应用-->Secret)
message: '{{ template "test_wechat.html" . }}' # 发送消息模板的设定
# 一个inhibition规则是在与另一组匹配器匹配的警报存在的条件下,使匹配一组匹配器的警报失效的规则。两个警报必须具有一组相同的标签。
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']

注:

1)repeat_interval配置项,对于email来说,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝

2)企业微信注册地址:https://work.weixin.qq.com

上述配置的email、webhook和wechat三种报警方式。目前Alertmanager所有的报警方式有以下几个方面:

email_config
hipchat_config
pagerduty_config
pushover_config
slack_config
opsgenie_config
victorops_config

3.3.tmpl模板的配置

1)test.tmpl

{{ define "test.html" }}
<table border="1">
<tr>
<td>报警项</td>
<td>实例</td>
<td>报警阀值</td>
<td>开始时间</td>
</tr>
{{ range $i, $alert := .Alerts }}
<tr>
<td>{{ index $alert.Labels "alertname" }}</td>
<td>{{ index $alert.Labels "instance" }}</td>
<td>{{ index $alert.Annotations "value" }}</td>
<td>{{ $alert.StartsAt }}</td>
</tr>
{{ end }}
</table>
{{ end }}

注:上述Labels项,表示prometheus里面的可选label项。annotation项表示报警规则中定义的annotation项的内容。

2)test_wechat.tmpl

{{ define "cdn_live_wechat.html" }}
{{ range $i, $alert := .Alerts.Firing }}
[报警项]:{{ index $alert.Labels "alertname" }}
[实例]:{{ index $alert.Labels "instance" }}
[报警阀值]:{{ index $alert.Annotations "value" }}
[开始时间]:{{ $alert.StartsAt }}
{{ end }}
{{ end }}

注:此处range遍历项与email模板中略有不同,只遍历当前没有处理的报警(Firing)。此项如果不设置,则在Alert中已经Resolved的报警项,也会被发送到企业微信。

3.4、在Prometheus模块定义告警规则

alertmanager_rules.yml样例配置文件(与prometheus同目录下)

groups:
- name: test-rules
rules:
- alert: InstanceDown # 告警名称
expr: up == 0 # 告警的判定条件,参考Prometheus高级查询来设定
for: 2m # 满足告警条件持续时间多久后,才会发送告警
labels: #标签项
team: node
annotations: # 解析项,详细解释告警信息
summary: "{{$labels.instance}}: has been down"
description: "{{$labels.instance}}: job {{$labels.job}} has been down "
value: {{$value}}

groups:

- name: test-rule
  rules:
  - alert: "内存报警"
    expr: 100 - ((node_memory_MemAvailable * 100) / node_memory_MemTotal) > 10
    for: 1s
    labels:
       severity: warning
    annotations:
       summary: "服务名:{{$labels.alertname}}"
       description: "业务500报警: {{ $value }}"
       value: "{{ $value }}"

- name: test-rule2
  rules:
  - alert: "内存报警"
    expr: 100 - ((node_memory_MemAvailable * 100) / node_memory_MemTotal) > 40
    for: 1s
    labels:
       severity: test
    annotations:
       summary: "服务名:{{$labels.alertname}}"
       description: "业务500报警: {{ $value }}"
       value: "{{ $value }}"

3.5、告警信息生命周期的3中状态

1)inactive:表示当前报警信息即不是firing状态也不是pending状态

2)pending:表示在设置的阈值时间范围内被激活的

3)firing:表示超过设置的阈值时间被激活的

3.6、结果展示

启动prometheus和alertmanager,满足报警条件后,就可以收到报警邮件了。

1. 浏览器界面化告警展示

在浏览器输入alertmanager的配置地址,即可查看所监控到的报警信息

http://localdns:9093/#/alerts

如图所示:

2 . 邮箱告警展示

1)原始邮箱告警展示

 2)模板邮箱告警展示

3、企业微信告警展示

四. Prometheus与其他模块对接

由于Prometheus灵活的接口配置和数据获取方式,可以很灵活的与其他模块进行对接,用于实时监控多个模块。

包括以下常用模块:

1.node_exporter

用户监控节点虚拟机的指标信息。

下载地址:https://github.com/prometheus/node_exporter/releases/download/v0.17.0-rc.0/node_exporter-0.17.0-rc.0.linux-386.tar.gz

2.jmx_exporter

下载地址:https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar

3.elasticsearch_exporter

下载地址:https://github.com/justwatchcom/elasticsearch_exporter/releases/download/v1.0.4rc1/elasticsearch_exporter-1.0.4rc1.linux-386.tar.gz

4.redis_exporter

下载地址:https://github.com/oliver006/redis_exporter/releases/download/v0.22.0/redis_exporter-v0.22.0.linux-386.tar.gz

5.mysqld_exporter

下载地址;https://github.com/prometheus/mysqld_exporter/releases/download/v0.11.0/mysqld_exporter-0.11.0.linux-386.tar.gz

6.postgres_exporter

下载地址:https://github.com/wrouesnel/postgres_exporter/releases/download/v0.4.7/postgres_exporter_v0.4.7_linux-amd64.tar.gz

7.mongodb_exporter

下载地址:https://github.com/dcu/mongodb_exporter/releases/download/v1.0.0/mongodb_exporter-linux-amd64

8.statsd_exporter

下载地址:https://github.com/prometheus/statsd_exporter/releases/download/v0.8.0/statsd_exporter-0.8.0.linux-amd64.tar.gz

9.mesos_exporter

下载地址:https://github.com/mesos/mesos_exporter/releases/download/v1.1.1/mesos_exporter-1.1.1.linux-arm64.tar.gz

10.apache_exporter

下载地址:https://github.com/Lusitaniae/apache_exporter/releases/download/v0.5.0/apache_exporter-0.5.0.linux-amd64.tar.gz

11.hadoop_exporter

下载地址:https://github.com/wyukawa/hadoop_exporter

12.logstash_exporter

下载地址:https://github.com/BonnierNews/logstash_exporter/archive/v0.1.2.tar.gz

13.sql_exporter

下载地址:https://github.com/justwatchcom/sql_exporter/releases/download/v0.2.0/sql_exporter-0.2.0.linux-amd64.tar.gz

14.oracle_exporter

下载地址:https://github.com/iamseth/oracledb_exporter/releases/download/0.0.8/oracledb_exporter.linux-amd64

15.zookeeper_exporter

下载地址1:https://github.com/carlpett/zookeeper_exporter/releases/download/v1.0.1/zookeeper_exporter-1.0.1.linux-amd64.tar.gz

下载地址2:https://github.com/carlpett/zookeeper_exporter/releases/download/v1.0.2/zookeeper_exporter

16.influxdb_exporter

下载地址:https://github.com/prometheus/influxdb_exporter/releases/download/v0.1.0/influxdb_exporter-0.1.0.linux-amd64.tar.gz

17.zabbix_exporter

下载地址:https://github.com/MyBook/zabbix-exporter/archive/1.0.2.tar.gz

18.opentsdb_exporter

下载地址:https://github.com/cloudflare/opentsdb_exporter/archive/0.0.3.tar.gz

19.grafana_exporter

下载地址:https://github.com/frodenas/grafana_exporter/releases/download/v0.1.0/grafana_exporter-0.1.0.linux-amd64.tar.gz

20.json_exporter

下载地址:https://github.com/sciffer/json_exporter

Prometheus+Grafana+Altermanager搭建监控系统的更多相关文章

  1. 基于Prometheus+Grafana+AlertManager的监控系统

    一.Prometheus 1.1 简介 Prometheus是一套开源的监控&报警&时间序列数据库的组合,基于应用的metrics来进行监控的开源工具 . 1.2 下载&安装 ...

  2. 实战 Prometheus 搭建监控系统

    实战 Prometheus 搭建监控系统 Prometheus 是一款基于时序数据库的开源监控告警系统,说起 Prometheus 则不得不提 SoundCloud,这是一个在线音乐分享的平台,类似于 ...

  3. Prometheus+Grafana通过kafka_exporter监控kafka

    Prometheus+Grafana通过kafka_exporter监控kafka 一.暴露 kafka-metric 方式 二.jmx_exporter方式 2.1 下载jmx_prometheus ...

  4. prometheus + grafana部署RabbitMQ监控

    prometheus + grafana部署RabbitMQ监控 1.grafana导入dashboards https://grafana.com/dashboards/2121   2.expor ...

  5. Prometheus+Grafana搭建监控系统

    之前在业务中遇到服务器负载过高问题,由于没有监控,一直没发现,直到业务方反馈网站打开速度慢,才发现问题.这样显得开发很被动.所以是时候搭建一套监控系统了. 由于是业余时间自己捯饬,所以神马业务层面的监 ...

  6. Grafana+Prometheus打造全方位立体监控系统

    前言 本文主要介绍如何使用Grafana和Prometheus以及node_exporter对Linux服务器性能进行监控.下面两张图分别是两台服务器监控信息: 服务器A 服务器B 概述 Promet ...

  7. Prometheus+Grafana+Alertmanager搭建全方位的监控告警系统

    prometheus安装和配置 prometheus组件介绍 1.Prometheus Server: 用于收集和存储时间序列数据. 2.Client Library: 客户端库,检测应用程序代码,当 ...

  8. Prometheus Grafana快速搭建

    Prometheus Prometheus和Grafana组合基本上是监控系统的标配.Prometheus做存储后端,Grafana做分析及可视化界面. 普罗米修斯是开源的系统监控/报警工具库,功能非 ...

  9. Prometheus+Grafana安装搭建

    介绍 Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB).Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本. 2016年 ...

随机推荐

  1. MegaCli 使用

    安装: wget ftp://rpmfind.net/linux/Mandriva/devel/cooker/x86_64/media/non-free/release/megacli-8.02.21 ...

  2. thinkphp5.0 实现图片验证效果且能点击图片刷新图片

    思路与文件上传相同,只是验证码一个方法: <img src="{:captcha_src()}" /> 后台文件:app\ceshi\yam <?php name ...

  3. 推荐系统之隐语义模型(LFM)

    LFM(latent factor model)隐语义模型,这也是在推荐系统中应用相当普遍的一种模型.那这种模型跟ItemCF或UserCF的不同在于: 对于UserCF,我们可以先计算和目标用户兴趣 ...

  4. Writing Reentrant and Thread-Safe Code(译:编写可重入和线程安全的代码)

    Writing Reentrant and Thread-Safe Code 编写可重入和线程安全的代码 (http://www.ualberta.ca/dept/chemeng/AIX-43/sha ...

  5. Qt编写的RTSP播放器+视频监控(vlc版本)

    几天写了个ffmpeg版本,今天特意抽空改写个vlc版本,之前vlc播放视频后,被接管了不能识别到鼠标,需要重新编译vlc源码得到支持鼠标消息的版本. /*** vlc视频播放类 作者:feiyang ...

  6. u-boot.lds文件简介

    可执行文件由许多链接在一起的对象文件组成.对象文件有许多节,如文本.数据.init 数据.bss等.这些对象文件都是由一个称为 链接器脚本(*lds)的文件链接并装入的.这个链接器脚本的功能是将输入对 ...

  7. Docker监控:google/cadvisor

    Docker自带了容器监控功能,可以对容器进行相关的性能监控,指标查看 主要包括: 主机的CPU情况和使用量 主机的内存情况和使用量 主机的本地镜像情况 主机的容器运行情况 常规使用docker ps ...

  8. [工具] CintaNotes

    CintaNotes是一款非常轻巧实用的笔记软件,可看作EverNote轻量级替代品.CintaNotes只需1个exe,体积仅1MB,却拥有 EverNote易于收集.实时搜索.条状排列.tag分类 ...

  9. iOS - 使用WKWebView时OC调JS的user-select属性控制用户操作

    // 页面加载完成之后调用 - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigatio ...

  10. vsftpd java程序无法创建和切换目录

    # Example config file /etc/vsftpd/vsftpd.conf # # The default compiled in settings are fairly parano ...