米乐m6
Mou Mou Jidian Generator
发电机维修 发电机回收
发电机出售 发电机租赁
客户统一服务热线

033-72817747
11524796762

您的位置: 主页 > 工程案例 > 公司企业 >

干货|使用 Prometheus 监控测试服务器集群实践详解

本文摘要:公司有几台测试服务器(由于测试服务器原来性能和线上机械硬件就纷歧样,所以让运维老师去掉了测试服务器报警),测试团队自己使用 Prometheus 监控几台测试服务器,当泛起故障的时候,把报警数据直接发送到企业微信中。Prometheus 特点先容Prometheus(普罗米修斯)是一套开源的监控 时间序列数据库的组合,起始是由 SoundCloud 公司开发的。

m6米乐

公司有几台测试服务器(由于测试服务器原来性能和线上机械硬件就纷歧样,所以让运维老师去掉了测试服务器报警),测试团队自己使用 Prometheus 监控几台测试服务器,当泛起故障的时候,把报警数据直接发送到企业微信中。Prometheus 特点先容Prometheus(普罗米修斯)是一套开源的监控 & 报警 & 时间序列数据库的组合,起始是由 SoundCloud 公司开发的。

随着生长,越来越多公司和组织接受接纳 Prometheus,社区也十分活跃,他们便将它独立成开源项目,而且有公司来运作。Google SRE 的书内也曾提到跟他们 BorgMon 监控系统相似的实现是 Prometheus。现在最常见的 Kubernetes 容器治理系统中,通常会搭配 Prometheus 举行监控。

Prometheus 基本原理是通过 HTTP 协议周期性抓取被监控组件的状态,这样做的利益是任意组件只要提供 HTTP 接口就可以接入监控系统,不需要任何斯达克学院测试或者其他的集成历程。这样做很是适合虚拟化情况好比 VM 或者 Docker。Prometheus 应该是为数不多的适合 Docker、Mesos、Kubernetes 情况的监控系统之一。

输出被监控组件信息的 HTTP 接口被叫做 exporter。现在互联网公司常用的组件大部门都有 exporter 可以直接使用,好比 Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包罗磁盘、内存、CPU、网络等等),详细支持的源看:https://github.com/prometheus。与其他监控系统相比,Prometheus 的主要特点是:一个多维数据模型(时间序列由指标名称界说和设置键 / 值尺寸)。

很是高效的存储,平均一个采样数据占~3.5bytes 左右,320 万的时间序列,每 30 秒采样,保持 60 天,消耗磁盘或许 228G。一种灵活的查询语言。不依赖漫衍式存储,单个服务器节点。

时间荟萃通过 HTTP 上的 PULL 模型举行。通过中间网关支持推送时间。通过服务发现或静态设置发现目的。

多种模式的图形和仪表板支持。Prometheus 架构概览它的服务历程是这样的 Prometheus daemon 卖力定时去目的上抓取 metrics(指标) 数据,每个抓取目的需要袒露一个 HTTP 服务的接口给它定时抓取。Prometheus支持通过设置文件、文本文件、zookeeper、Consul、DNS SRV lookup 等方式指定抓取目的。

支持许多方式的图表可视化,例如十分精致的 Grafana,自带的 Promdash,以及自身提供的模版引擎等等,还提供 HTTP API 的查询方式,自界说所需要的输出。AlertmanagerAlertmanager 是独立于 Prometheus 的一个组件,可以支持 Prometheus 的查询语句,提供十分灵活的报警方式。PushGateway:这个组件是支持 Client 主动推送 metrics 到 PushGateway,而 Prometheus 只是定时去 Gateway 上抓取数据。

m6米乐

如果有使用过 statsd 的用户,则会以为这十分相似,只是 statsd 是直接发送给服务器端,而 Prometheus 主要还是靠历程主动去抓取。Prometheus 的数据模型Prometheus 从基础上所有的存储都是定时间序列去实现的,相同的 metrics(指标名称) 和 label(一个或多个标签) 组成一条时间序列,差别的 label 表现差别的时间序列。

为了支持一些查询,有时还会暂时发生一些时间序列存储。metrics name&label 指标名称和标签。每条时间序列是由唯一的” 指标名称” 和一组” 标签(key=value)” 的形式组成。

指标名称:一般是给监测对像起一名字,例如 httprequeststotal 这样,它有一些命名规则,可以包字母数字 _ 之类的的。通常是以应用名称开头 _ 监测对像 _ 数值类型 _ 单元这样。例如:pushtotal、userloginmysqldurationseconds、appmemoryusage_bytes。

标签:就是对一条时间序列差别维度的识别了,例如一个 http 请求用的是 POST 还是 GET,它的 endpoint 是什么,这时候就要用标签去标志了。最终形成的标识即是这样了:httprequeststotal{method=”POST”,endpoint=”/api/tracks”}。记着,针对 httprequeststotal 这个 metrics name 无论是增加标签还是删除标签都市形成一条新的时间序列。

查询语句就可以跟据上面标签的组合来查询聚合效果了。如果以传统数据库的明白来看这条语句,则可以思量 httprequeststotal 是表名,标签是字段,而 timestamp 是主键,另有一个 float64 字段是值了。(Prometheus 内里所有值都是按 float64 存储)。

米乐m6

prometheus 四种数据类型GaugeGauge 通例数值,例如 温度变化、内存使用变化。可变大,可变小。重启历程后,会被重置。

例如:memoryusagebytes{host=”master-01″} 100 < 抓取值、memoryusagebytes{host=”master-01″} 30、memoryusagebytes{host=”master-01″} 50、memoryusagebytes{host=”master-01″} 80 < 抓取值。HistogramHistogram(直方图)可以明白为柱状图的意思,常用于跟踪事件发生的规模,例如:请求耗时、响应巨细。它特别之处是可以对记载的内容举行分组,提供 count 和 sum 全部值的功效。

例如:{小于 10=5 次,小于 20=1 次,小于 30=2 次},count=7 次,sum=7 次的求和值。SummarySummary 和 Histogram 十分相似,常用于跟踪事件发生的规模,例如:请求耗时、响应巨细。同样提供 count 和 sum 全部值的功效。

例如:count=7 次,sum=7 次的值求值。它提供一个 quantiles 的功效,可以按 % 比划分跟踪的效果。例如:quantile 取值 0.95,表现取采样值内里的 95% 数据。

依赖镜像docker pull prom/node-exporterdocker pull prom/prometheusdocker pull grafana/grafana部署 prometheus设置mkdir /opt/prometheuscd /opt/prometheus/vim prometheus.ymlyml 内容yml 中设置了一个 prometheus 自己和一台 linux 监控global: scrape_interval: 60s evaluation_interval: 60sscrape_configs:- job_name: prometheus static_configs:- targets: ['localhost:9090'] labels: instance: prometheus- job_name: linux static_configs:- targets: ['192.168.91.132:9100'] labels: instance: localhost启动 prometheus启动的时候挂载了 prometheus.yml 文件docker run -d -p 9090:9090 -v /Users/qamac/Documents/script/docker_prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus检察目的机械http://192.168.143.242:9090/targets如果泛起 status 是 down 的情况说明没有毗连乐成 , 需要检核对应服务是否启动乐成及对应端口泛起下图 , 说明设置乐成。检察收罗 metrics点击下面这个接口 , 会跳转到 metrics 页面 , 通过轮训的方式更新数据http://192.168.143.242:9090/metrics部署 node-exporternode-exporter 启动后会在服务器上启动一个历程收罗数据 ,prometheus 会每隔几秒通过接口获取服务器的 metrics 数据 .注意当地 mac 启动不能加--net="host"docker run -d -p 9100:9100 -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" --net="host" prom/node-exporter部署 Grafana启动 grafanadocker run -d -p 3000:3000 grafanagrafana 地址登录账号密码:admin/adminhttp://192.168.143.242:3000grafana 设置prometheus 设置设置 prometheus 数据源grafana 模版导入 dashboards 模版https://grafana.com/grafana/dashboards/8919展示设置多个机械监控 , 需要在每一台机械部署 node-exporter.设置告警规则报警规则设置rules.yml 中设置监控服务的内存、cpu、磁盘告警计谋Server: '{{$labels.instance}}' summary: "{{$labels.instance}}: High Memory usage detected" explain: " 内存使用量凌驾 90%,现在剩余量为:{{ $value }}M" description: "{{$labels.instance}}: Memory usage is above 90% (current value is: {{ $value }})"- alert: CPU 报警 expr: (100 - (avg by (instance)(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)) > 90for: 2m labels: team: node annotations:Alert_type: CPU 报警Server: '{{$labels.instance}}' explain: "CPU 使用量凌驾 90%,现在剩余量为:{{ $value }}" summary: "{{$labels.instance}}: High CPU usage detected" description: "{{$labels.instance}}: CPU usage is above 90% (current value is: {{ $value }})"- alert: 磁盘报警 expr: 100.0 - 100 * ((node_filesystem_avail_bytes{mountpoint=~"/", device!="rootfs"} / 1000 / 1000 ) / (node_filesystem_size_bytes{mountpoint=~"/", device!="rootfs"} / 1024 / 1024)) > 90for: 2m labels: team: node annotations:Alert_type: 磁盘报警Server: '{{$labels.instance}}' explain: " 磁盘使用量凌驾 90%,现在剩余量为:{{ $value }}G" summary: "{{$labels.instance}}: High Disk usage detected" description: "{{$labels.instance}}: Disk usage is above 90% (current value is: {{ $value }})"- alert: 服务器下线告警 expr: up == 0for: 1m labels: user: admin annotations: summary: "Instance {{ $labels.instance }} down" description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."加载设置prometheus.yml 加载 rule_files# Alertmanager configurationalerting: alertmanagers:- static_configs:- targets: ["192.168.1.232:9093"]# - alertmanager:9093# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.rule_files:- "rules.yml"启动 prometheusdocker run -d -p 9090:9090 --name=prometheus1 -v /Users/qamac/Documents/script/docker_prometheus/prometheus.yml:/etc/prometheus/prometheus.yml -v /Users/qamac/Documents/script/docker_prometheus/memory_over.yml:/etc/prometheus/rules.yml prom/prometheus部署 alertmanager邮箱设置可以通过邮件的形式发送告警邮件global: smtp_smarthost: 'smtp.126.com:25'  #163 服务器 smtp_from: 'xxxxx@126.com'        #发邮件的邮箱 smtp_auth_username: 'xxxxx@126.com'  #发邮件的邮箱用户名,也就是你的邮箱 smtp_auth_password: 'xxxxx'        #发邮件的邮箱密码route: group_by: ['alertname'] repeat_interval: 1h receiver: live-monitoringreceivers:- name: 'live-monitoring' email_configs:- to: 'xxxxx@xxxxx.com'        #收邮件的邮箱webhook 设置因为我司用企业微信比力多,再加上平时也不怎么看邮件。所以想自界说一个 webhook 地址,把告警发到企业微信群中。

global: resolve_timeout: 5mroute: group_by: ['alertname'] group_wait: 10s group_interval: 10s repeat_interval: 1h receiver: 'web.hook'receivers:- name: 'web.hook' webhook_configs:- url: 'http://127.0.0.1:5000/send'inhibit_rules:- source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']~启动 alertmanagerdocker run -d -p 9093:9093 -v /data/docker_alertmanager/simple.yml/:/etc/alertmanager/config.yml --name alertmanager1 prom/alertmanageralertmanager 的 web 页面http://192.168.1.232:9093/#/status下图是设置的告警方式prometheus 中报警模块http://192.168.143.242:9090/alerts会见上面的地址 , 可以看到已经加载了告警规则报警的几个状态Inactive: 既不是 pending 也不是 firing 的时候状态变为 inactivePending:警报被激活,可是低于设置的连续时间。这里的连续时间即 rule 里的 FOR 字段设置的时间 . 改状态下不发送报警 .Firing: 警报已被激活,而且超出设置的连续时间。该状态下发送报警 .如下图的 for 字段是设置 2 分钟循环 , 第一次触发规则是 Pending 状态 , 如果凌驾 2 分钟就酿成了 Firing 状态 , 才发送告警Webhook 服务我们需要一个 webhook 服务接受报警的消息然后在发给企业微信群中 .这里我使用 python flask 框架开发 web 服务 .报警消息的花样{"status": "firing","labels": {"instance": "localhost","job": "linux","user": "admin","alertname": "NodeMemoryUsage"},"endsAt": "2020-01-06T08:38:59.334190464Z","generatorURL": "http://13b226ded726:9090/graph?g0.expr=%28node_memory_MemTotal_bytes+-+%28node_memory_MemFree_bytes+%2B+node_memory_Buffers_bytes+%2B+node_memory_Cached_bytes%29%29+%2F+node_memory_MemTotal_bytes+%2A+100+%3E+5&g0.tab=1","startsAt ": "2020-01-05T15:33:59.334190464Z","annotations": {"description": "localhost: Memory usage is above 80% (current value is:22.168394749407362)","summary": "localhost: High Memory usage detected"}}界说 send 接口剖析响应数据Dockerfile这里使用 docker 把服务打包成镜像部署FROM python3.7RUN pip3 install requests && pip3 install flask && pip3 install logzero && pip3 install gunicorn && pip3 install flask_scriptEXPOSE 5000ENTRYPOINT ["/run.sh"]企业微信报警以上,期待与列位同学多交流探讨。(文章泉源于霍格沃兹测试学院)。


本文关键词:干货,使用,Prometheus,监控,m6米乐官网入口,测试,服务器,集群

本文来源:米乐m6-www.zwwl.com.cn

Copyright © 2005-2021 www.zwwl.com.cn. 米乐m6科技 版权所有  ICP备案:ICP备44869629号-2