我是靠谱客的博主 活力跳跳糖,最近开发中收集的这篇文章主要介绍grafana计算不同时间的差值_搭建监控系统 (Grafana、Prometheus、Alertmanager),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、环境搭建

1、安装Node exporter

1) a、mac 安装 brew install node_exporter

47390257c97e575c77965beacb151b84.png

b、启动 node_exporter

node_exporter --web.listen-address=":9600" --web.telemetry-path="/node_metrics"

6b0709a008ff161e056a6212717e4e10.png

c、访问启动页面

0458663bc807e9b6b4c37f23780a522c.png
  • node_boot_time:系统启动时间
  • node_cpu:系统CPU使用量
  • nodedisk*:磁盘IO
  • nodefilesystem*:文件系统用量
  • node_load1:系统负载
  • nodememeory*:内存使用量
  • nodenetwork*:网络带宽
  • node_time:当前系统时间
  • go_*:node exporter中go相关指标
  • process_*:node exporter自身进程相关运行指标

2) docker启动

a、docker pull prom/node-exporter

8fb88a881aa559e212d7400a4f912133.png

b、docker run -d --name=node -p 9100:9100 prom/node-exporter:latest

3ce55a964949e27d73542e57d570aa7c.png

c、验证启动结果

a5f25ba791663325d7133891db8b43f5.png

2、安装Prometheus

1) docker pull prom/prometheus

25bafe993ac4be174aaa12b84191de21.png

2)启动prometheus

docker run -d -p 9090:9090 -v /tmp/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

a、prometheusyml

global:

scrape_interval: 15s

external_labels:

monitor: 'codelab-monitor'

# Alertmanager配置

alerting:

alertmanagers:

- static_configs:

- targets: ["192.168.50.100:9093"] # 设定alertmanager和prometheus交互的接口,即alertmanager监听的ip地址和端口

rule_files:

- '/tmp/prometheus/prometheus_rules.yml'

- '/tmp/prometheus/alertmanager/alertmanager_rules.yml'

scrape_configs:

- job_name: 'prometheus'

# 覆盖全局的 scrape_interval

scrape_interval: 5s

static_configs:

- targets: ['192.168.50.100:9090']

- job_name: 'node'

scrape_interval: 10s

metrics_path: "/metrics"

static_configs:

- targets: ['192.168.50.100:9100'] # 本机 node_exporter 的 endpoint 这里若配置成127.0.0.1 会出现gramtheus访问node不通问题

b、prometheus_rules.yml

(base) mengfaniaodeMBP:prometheus mengfanxiao$ cat prometheus_rules.yml

groups:

- name: example #报警规则的名字

rules:

# Alert for any instance that is unreachable for >5 minutes.

- alert: InstanceDown #检测job的状态,持续1分钟metrices不能访问会发给altermanager进行报警

expr: up == 0

for: 1m #持续时间

labels:

serverity: page

annotations:

summary: "Instance {{ $labels.instance }} down"

description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."

#- alert: "it's has problem" #报警的名字

# expr: "test_tomcat{exported_instance="uat",exported_job="uat-app-status",host="test",instance="uat",job="uat-apps-status"} - test_tomcat{exported_instance="uat",exported_job="uat-app-status",host="test",instance="uat",job="uat-apps-status"} offset 1w > 5" # 这个意思是监控该表达式查询出来的值与一周前的值进行比较,大于5且持续10m钟就发送给altermanager进行报警

# for: 1m #持续时间

# labels:

# serverity: warning

# annotations:

# summary: "{{ $labels.type }}趋势增高"

# description: "机器:{{ $labels.host }} tomcat_id:{{ $labels.id }} 类型:{{ $labels.type }} 与一周前的差值大于5,当前的差值为:{{ $value }}" #自定义的报警内容

c、alertmanager_rules.yml

(base) mengfaniaodeMBP:alermanager mengfanxiao$ cat alertmanager_rules.yml

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}}

(base) mengfaniaodeMBP:alermanager mengfanxiao$ ls

alertmanager.ymlalertmanager_rules.ymlconfig.ymltemplate

(base) mengfaniaodeMBP:alermanager mengfanxiao$

(base) mengfaniaodeMBP:alermanager mengfanxiao$ cat alertmanager_rules.yml

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}}

3)

a、验证是否启动成功

0a849290ebb33b5de0233295c7fe5f5c.png
158999ad6345fc79c2852a1d098994aa.png

b、prometheus的数据

6e416b9e60925d33887561c6b438b86a.png

c、看配置的2个数据源是否成功

c3e8f2fe7e3ec01e10a6c498c761d559.png

问题:

Get http://127.0.0.1:9100/metrics: dial tcp 127.0.0.1:9100: connect: connection refused

但telnet 127.0.0.1 9100是可以的

原因是:

容器具有单独的网络名称空间,这意味着容器中的127.0.0.1在主机上不是127.0.0.1。

您应该使用主机的IP或使用--network = host启动容器。

host模式下使用-p或者-P会出现WARNING: Published ports are discarded when using host network mode 当你是host模式的时候,主机会自动把他上面的端口分配给容器,这个时候使用-p或者-P是无用的。但是还是可以在Dockerfile中声明EXPOSE端口 后续文章再详谈

3、安装grafana

1)docker pull grafana/grafana

ae1ffaaaf2e06987696d9263ce23b2dc.png

2)查看下载情况

docker images|grep grafana/grafana

5febdba6e40e2291d25cc11542bac07e.png

3)创建一个grafana/grafana容器并启动

docker run -d --name=grafana -p 3000:3000 grafana/grafana

688630969834831e2894a30861fc518f.png
5e579029aadf427e2f69e53a2c7baf84.png

4)访问启动页面

de1ecd506b43eb2370b1c5615fc2556d.png

默认账号admin/admin

5)登陆了之后 配置数据源

387db75cca05e602d932d1bf45090f16.png
4fef564f26e18b6adebba0cd2c5218b6.png
12aa2a40bbc24f97be25889696311fb2.png

数据源配置好之后 创建仪表盘用于显示数据源的数据

d3912c4126d0387a88a42f342a93361c.png

选择配置好的这个数据源

9e8cd9329ab8820bae98b10444b286e5.png

这里选择具体的数据指标仪表盘中就会画出对应的折线

7282e2950410324fdfed9aa006311408.png

不同的仪表盘模式供选择

c144961707706d60cb26a9f217f66bfa.png

4、安装Alertmanager

1) docker pull docker.io/prom/alertmanager:latest

55f6a8843060fbb78a2b7da4e540e69d.png

2) docker run -d -p 9093:9093 -v /tmp/prometheus/alermanager/alertmanager.yml:/etc/alertmanager/config.yml --name alertmanager docker.io/prom/alertmanager:latest

a、alertmanager.yml

(base) mengfaniaodeMBP:alermanager mengfanxiao$ cat 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']

b、test.tmpl

(base) mengfaniaodeMBP:template mengfanxiao$ cat test.tmpl

{{ define "test.html" }}

报警项实例报警阀值开始时间

{{ range $i, $alert := .Alerts }}

{{ index $alert.Labels "alertname" }}{{ index $alert.Labels "instance" }}{{ index $alert.Annotations "value" }}{{ $alert.StartsAt }}

{{ end }}

{{ end }}


3) 验证启动结果

e2c3210bbe869952755f912e19941d58.png
f2bdb3a5eb0a8fbe8076ce3f7d2dba7b.png

这里可看到 Prometheus sever 端发过来的 alerts,并可做 alerts 搜索,分组,静音等操作

18c809f2a77d71e23667b209ba52a678.png

二、遗留问题下次解析

1、告警相关

a、promtheus的alert页面没有显示告警配置

b、node正常运行的时候 promtheus的alert页面没有显示

c、node停止运行时 promtheus的alert页面没有显示且alertmanage没有收到告警

d、alertmanager还没有配置receiver信息

2、简述各个组件是干什么的

3、简述原理及应用场景

a、简述原理

b、应用场景

4、docker host模式解析

参考资料

1、https://www.ibm.com/developerworks/cn/cloud/library/cl-lo-prometheus-getting-started-and-practice/index.html

2、https://www.jianshu.com/p/7f586b482c44?utm_campaign=studygolang.com&utm_medium=studygolang.com&utm_source=studygolang.com

最后

以上就是活力跳跳糖为你收集整理的grafana计算不同时间的差值_搭建监控系统 (Grafana、Prometheus、Alertmanager)的全部内容,希望文章能够帮你解决grafana计算不同时间的差值_搭建监控系统 (Grafana、Prometheus、Alertmanager)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部