Docker实现GPA+Exporter监控告警系统
Docker实现GPA+Exporter监控告警系统
1.搭建grafana,prometheus,blackbox_exporter环境
# docker run -d -p 9090:9090 -v /tmp:/etc/prometheus --name prometheus prom/prometheus
# docker run -d -p 3000:3000 --name grafana grafana/grafana:5.1.0
# docker run -d -p 9115:9115 --name blackbox_exporter -v /tmp:/config prom/blackbox-exporter --config.file=/config/blackbox.yml
# docker run -d -p 9093:9093 -v /tmp/alertmanager_config.yml:/etc/alertmanager/alertmanager.yml --name alertmanager prom/alertmanager 2.配置grafana添加promethues数据源并添加图表可视化。安装pie插件并重启grafana。
# grafana-cli plugins install grafana-piechart-panel
# docker restart grafana 3.blackbox_exporter和promethues修改配置文件之后使用以下命令重载:
# curl -XPOST http://127.0.0.1:9115/-/reload
# curl -XPOST http://127.0.0.1:9090/-/reload // 需要 --web.enable-lifecycle 参数为true 4.Debugging Blackbox exporter failures
# The first is to add &debug=true to the probe URL, for example http://localhost:9115/probe?module=http_2xx&target=https://www.prometheus.io/&debug=true. This will not produce metrics, but rather detailed debug information。 5.配置文件示例:
==========================================
1.#cat blackbox.yml
modules:
http_2xx: # http 监测模块
prober: http
http:
valid_http_versions: ["HTTP/1.1", "HTTP/2"]
valid_status_codes: [] # Defaults to 2xx
method: GET
http_post_2xx: # http post 监测模块
prober: http
http:
method: POST
tcp_connect: # tcp 监测模块
prober: tcp
timeout: 5s
tcp:
preferred_ip_protocol: "ip4"
source_ip_address: "127.0.0.1"
ping: # icmp 检测模块
prober: icmp
timeout: 5s
icmp:
preferred_ip_protocol: "ip4"
source_ip_address: "127.0.0.1"
dns:
prober: dns
timeout: 5s
dns:
transport_protocol: "tcp" # defaults to "udp"
preferred_ip_protocol: "ip4" # defaults to "ip6"
query_name: "xxx.xxx.cn"
query_type: "A"
==========================================
2.#cat promethues.yml
global:
scrape_interval: 15s
evaluation_interval: 10s
external_labels:
monitor: 'monitor' alerting:
alertmanagers:
- static_configs:
- targets:
- 172.17.0.5:9093 rule_files:
- "first_rules.yml" scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090'] - job_name: 'blackbox_ping_all'
scrape_interval: 5s
scrape_timeout: 2s
metrics_path: /probe
params:
module: [ping]
file_sd_configs:
- files:
- /etc/prometheus/blackbox_ping.json
refresh_interval: 1m
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 172.17.0.2:9115 - job_name: 'blackbox_http_code'
scrape_interval: 5s
metrics_path: /probe
params:
module: [http_2xx]
file_sd_configs:
- files:
- /etc/prometheus/blackbox_http_code.json
refresh_interval: 1m
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 172.17.0.2:9115 - job_name: "blackbox_tcp"
metrics_path: /probe # 不是 metrics,是 probe
params:
module: [tcp_connect] # TCP 模块
file_sd_configs:
- files:
- /etc/prometheus/blackbox_tcp.json
refresh_interval: 1m
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 172.17.0.2:9115 - job_name: "blackbox_dns"
metrics_path: /probe # 不是 metrics,是 probe
params:
module: [dns] # DNS 模块
static_configs:
- targets:
- xxx.xxx.xxx.xxx:53 #dns服务器的IP地址
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 172.17.0.2:9115 1)# blackbox_ping.json
[
{
"targets": ["172.17.0.2", "172.17.0.3", "172.17.0.4", "172.17.0.5"]
}
] 2)# blackbox_http_code.json
[
{
"targets": ["172.17.0.4:3000", "172.17.0.5:9093", "https://www.baidu.com/"]
}
] 4)# blackbox_tcp.json
[
{
"targets": ["xxx.xxx.xxx.xxx:53"]
}
] 5)# blackbox_dns.json
[
{
"targets": ["xxx.xxx.xxx.xxx:53"] # 不要省略端口号
}
] ==========================================
3.#cat first_rules.yml
groups:
- name: http_code
rules:
- alert: HTTP_CODE_ERROR
expr: probe_http_status_code{instance="https://xxx.xxx.com/",job="blackbox_http_2xx"} != 200
for: 10m
labels:
severity: page
annotations:
summary: High request latency # http_code alert rules
- name: example
rules:
- alert: ProbeFailing
expr: up{job="blackbox_http_code"} == 0 or probe_success{job="blackbox_http_code"} == 0
for: 10m
labels:
severity: page # ssl expiry alert rules
- name: ssl_expiry.rules
rules:
- alert: SSLCertExpiringSoon
expr: probe_ssl_earliest_cert_expiry{job="blackbox_http_code"} - time() < 86400 * 30
for: 10m # ping rules
- name: ping_all
rules:
- alert: Ping_down
expr: probe_success{job="blackbox_ping_all"} == 0
for: 10m
==========================================
4.#cat alertmanager.yml
# 全局配置项
global:
resolve_timeout: 5m #处理超时时间,默认为5min
smtp_smarthost: 'smtp.xxx.xxx.com:25' # 邮箱smtp服务器代理
smtp_from: 'xxx@xx.com' # 发送邮箱名称
smtp_auth_username: 'xxx@xx.com' # 邮箱名称
smtp_auth_password: 'xxxxxx' # 邮箱密码或授权码 # 定义模板信息
templates:
- 'template/*.tmpl' # 定义路由树信息
route:
group_by: ['severity'] # 报警分组依据
group_wait: 10s # 当一个新的报警分组被创建后,需要等待至少group_wait时间来初始化通知,这种方式可以确保您能有足够的时间为同一分组来获取多个警报,然后一起触发这个报警信息。
group_interval: 10s # 当第一个报警发送后,等待'group_interval'时间来发送新的一组报警信息。
repeat_interval: 1m # 发送重复警报的周期,如果一个报警信息已经发送成功了,等待'repeat_interval'时间来重新发送他们,对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
receiver: 'email' # 发送警报的接收者的名称,以下receivers name的名称
# 上面所有的属性都由所有子路由继承,并且可以在每个子路由上进行覆盖。
routes:
- receiver: email
group_wait: 10s
match:
instance: 172.17.0.2 # 定义警报接收者信息
receivers:
- name: 'email' # 警报
email_configs: # 邮箱配置
- to: 'xxx@xx.com' # 接收警报的email配置
html: '{{ template "test.html" . }}' # 设定邮箱的内容模板
headers: { Subject: "[WARN] 报警邮件"} # 接收邮件的标题
# 一个inhibition规则是在与另一组匹配器匹配的警报存在的条件下,使匹配一组匹配器的警报失效的规则。两个警报必须具有一组相同的标签。
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
==========================================
5.#cat test.tmpl
{{ define "test.html" }}
<table border="">
<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 }} ==========================================
# 原理和问题总结:
1.blackbox_exporter是Prometheus监控系统中用于在agent机器上采集http,DNS,ICMP相关信息,通过prometheus传递的参数和target,映射到对应的agent的web接口上进行处理。默认情况下,Blackbox Exporter在端口9115上运行,并在/probe端点上提供指标。Blackbox Exporter的scrape_configs配置与其他出口商的配置不同。 最显着的不同是targets指令,它列出了被探测的端点而不是出口者的地址。 出口商的地址是使用适当的__address__标签设置的。
2.prometheus采集到监控数据后需要告警时发现alertmanager要等待prometheus发送数据之后再处理,也就是告警出现延时。分析验证结果:目标节点down机后,exporter很快检测到,通过查询可以知道prometheus中也更新了,但是prometheus的alert并没有更新,而是等待了一会之后由绿色变为黄色,进入pending状态,后来查看配置知道和evaluation_interval参数有关,默认是1m,该参数是评估报警规则的时间间隔,也就是更新Alert状态的时间,然后根据规则里for的设置5秒后由黄色变为红色,进入firing状态,这时发送警报到alertmanager,由alertmanager发出邮件告警。alertmanager同一个告警发送邮件的间隔时间是30s,可以通过设置Slienced来暂时屏蔽告警信息的发送。通过alertmangaer的repeat interval,group wait和group interval三个参数(配置在route树形结构下)来控制通知的发送规则和时间间隔,防止告警信息轰炸,具体配置需熟悉。注意:group_wait的时间如果设置时间过长,会导致报警发出有延迟;配置时间过短,同时会导致大量的邮件轰炸。建议根据不同警报重要性进行配置。
3.alertmanager的路由分组使用group_by配合alert rule规则配置文件中设置的labels来实现的。使得告警邮件合并了聚合后的告警信息,减少了告警邮件数。
4.还有其他的exporter可以安装后使用targets发现导入即可。
Docker实现GPA+Exporter监控告警系统的更多相关文章
- Docker 最常用的监控方案 - 每天5分钟玩转 Docker 容器技术(78)
当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越重要. 在本章中,我们将讨论几个目前比较常用的容器监控工具和方案,为大家构建自己的监控系统提供参考. 首先我们会讨 ...
- Docker部署Zabbix+Grafana监控
Docker部署Zabbix+Grafana监控 环境 centos 7 ; Docker 17.12.0-ce ; docker-compose version 1.20.1 2018-4-1 当前 ...
- 第 10 章 容器监控 - 078 - Docker 最常用的监控方案
Docker 最常用的监控方案 当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越重要. Docker 自带的几个监控子命令: ps .top .stats 功能更 ...
- centos7下安装docker(17.5docker监控的总结对比)
到现在为止,我已经学习了docker自带的监控方案:ps/ls/top/stats,以及sysdig,weave scope,cadvisor,prometheus多种监控工具,现在做个总结和比较 部 ...
- Docker容器的自动化监控实现
本文由 网易云 发布. 近年来容器技术不断成熟并得到应用.Docker作为容器技术的一个代表,目前也在快速发展中,基于 Docker的各种应用也正在普及,与此同时 Docker对传统的运维体系也带来 ...
- 使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库
一.背景 在平时开发过程当中需要针对 MySQL 数据库进行监控,这里我们可以使用 Grafana 和 Prometheus 来实现监控功能.Grafana 是一款功能强大的仪表盘面板,支持多种数据源 ...
- centos7下安装docker(17.4docker监控----prometheus)
Prometheus是一个非常优秀的监控工具.准确的说,应该是监控方案.Prometheus提供了监控数据搜集,存储,处理,可视化和告警一套完整的解决方案 Prometheus架构如盗图: 官网上的原 ...
- docker stack 部署容器监控方案(cAdvisor、Prometheus、Grafana)
=============================================== 2018/7/8_第1次修改 ccb_warlock === ...
- Prometheus+Grafana+Alertmanager搭建全方位的监控告警系统
prometheus安装和配置 prometheus组件介绍 1.Prometheus Server: 用于收集和存储时间序列数据. 2.Client Library: 客户端库,检测应用程序代码,当 ...
随机推荐
- 恢复Win10照片查看器
批处理文件: @echo off&cd\&color 0a&cls echo 恢复Win10照片查看器 reg add "HKLM\SOFTWARE\Microsof ...
- ARTS 12.31 - 1.4
Algorithm 这是一道需要用动态规划的问题.求字符串的最长回文子序列. 复习了一遍动态规划,重点是要分析出最优解所包含的子问题的最优解,把过程描述为数学公式. 题目https://leetcod ...
- jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
转:http://www.cnblogs.com/wiseant/p/4553837.html 最近在一个ASP.NET MVC5项目中使用Bootstrap的模态窗(弹出层)来让用户填写内容,其中的 ...
- 高启全:长江存储自主3D NAND,DRAM研发欢迎美光一起加入(千秋大业,慢慢做)
台湾DRAM教父高启全转战大陆紫光集团操盘存储器大计划超过1年,日前晋升长江存储的执行董事.代行董事长,接受DIGITIMES独家专访公开未来规划:他指出,已齐聚500名研发人员在武汉投入3D NAN ...
- ML:单变量线性回归(Linear Regression With One Variable)
模型表达(model regression) 用于描述回归问题的标记 m 训练集(training set)中实例的数量 x 特征/输入变量 y 目标变量/输出变量 (x,y) 训练集中的实例 (x( ...
- Android Java调用Qt写的so库
有时候,我们反编译apk得到一个so库,如果直接使用这个so库的话,必须使用原来so库同样的package名字,才能用.这样人家反编译你的apk,就知道你侵犯了人家的版权.为了达到混淆的目的,我们可以 ...
- 我的第一个Chrome插件:天气预报应用
1.Chrome插件开发基础 开发Chrome插件很简单,只要会基本的前台技术HTML.CSS.JS就可以开发了. Chrome插件一般包括两个HTML页面background和popup. ...
- C语言实现常用排序算法——插入排序
插入排序是最基础的排序算法,原理: 首先1个元素肯定是有序的,所以插入排序从第二个元素开始遍历:内循环首先请求一个空间保存待插入元素,从当前元素向数组起始位置反向遍历:当发现有大于待插入元素的元素,则 ...
- Kong:Nginx支持的API Gateway管理解决方案
Kong的主要功能 Kong可灵活扩展:只要增添更多的服务器实例,它就能横向扩展,毫无问题,那样你可以支持更多流量,同时确保网络延迟很短. Kong可在任何地方运行:它可以部署在单个或多个数据中心环境 ...
- IOS 数据存储(NSKeyedArchiver 归档篇)
什么是归档 当遇到有结构有组织的数据时,比如字典,数组,自定义的对象等在存储时需要转换为字节流NSData类型数据,再通过写入文件来进行存储. 归档的作用 之前将数据存储到本地,只能是字符串.数组.字 ...