首页 体育 教育 财经 社会 娱乐 军事 国内 科技 互联网 房产 国际 女人 汽车 游戏

昔日教人类用火的prometheus,如今在努力报警

2019-12-18

原创:小姐姐滋味,欢迎共享,转载请保存出处。

像我这么酷爱户外日子的人,初冬时节,还找了个荫蔽的当地去野炊。现在的社会,为了找找到这么一个静寂的存在,我可谓煞费苦心。

初冬的夜,连虫鸣声都没有,星空高而深远。蜷缩在篝火周围,我想起了普罗米修斯。在希腊神话中,他教会人类学会运用火,完全告别了茹毛饮血的时代。

早在2012年,还有一部叫做《普罗米修斯》的电影演出,它是《异行》的前传,其绚丽庞大的场景让人形象深入。

在这无尽的时空和不知道的范畴面前,我一个小小程序员,真是连屁都不如。比我强壮的比我刻苦,比方立下flag学python的 潘总 ,他应该能牵强算得上个屁。

普罗米修斯的英文是 prometheus ,从这拗口的姓名就可以看出,它是个进口货。prometheus是google内部监控报警体系的开源版别,现在十分盛行。

监控体系是陈词滥调的问题了,xjjdog在曾经也专门总结过。 《这么多监控组件,总有一款合适你》 ,这篇长文,从多个维度上介绍了监控体系,而prometheus面向的便是 metric 类型的数据监控。

今日,咱们要侧重介绍的,便是prometheus。来势汹汹,大有统一天下的姿势。本篇文章首要是为了引起你的爱好,并供给了许多实践过的装备文件。说了这么多废话,就让咱们正式开端吧。

你在运用一些类似于grafana的展现组件时,可以发现底层的数据存储,可以运用Prometheus,而这两个东西显着没有血缘关系。在享用grafana登峰造极的美丽时,应该认识到一个实际:现在的监控体系,都拆分成了十分详细的细微模块,让你可以依据经历和习气进行精细化挑选。

Prometheus生态体系由多个组件组成,其间一些是可选的。大都Prometheus组件由Go言语编写,使这些组件很简略编译和布置。网上许多文章翻译的不流畅难明,xjjdog在这儿便运用人话描绘。

注:敲黑板,带★是关键,要考 。不学没法用

★1) Prometheus Server :首要担任数据 搜集 和 存储 ,供给PromQL 查询言语 的支撑。留意,它一起是一个存储!

2)客户端SDK:支撑十分多言语的类库,越多越好。

3) Push Gateway :Prometheus获取监控数据的首要方法是 拉取 形式,但总有一些瞬时发作的监控项,这种信息无法pull。所以这个组件是为了支撑一些存活时刻很短的事情,把这些信息进行缓冲。

4) PromDash :运用Rails开发可视化的Dashboard,用于可视化方针数据

★5) Exporter :数据搜集组件,也便是一些agent。担任从方针处搜集数据,并将其转化为Prometheus支撑的格局

★6) Alertmanager :报警办理器,用于发送到正确的逻辑分组。常见的接纳方法有:电子邮件,pagerduty,OpsGenie, webhook 等

7) prometheus_cli :指令行东西

8)其他辅助性东西:多种导出东西,可以支撑Prometheus存储数据转化为HAProxy、StatsD、Graphite等东西所需求的数据存储格局

长篇大论的扯了一通,仍是逃脱不了搜集、处理、展现三大部件。看了以上的介绍,你应该可以看懂这张官方图。看那些大框框,不要重视细节。

咱们来抽取一下比较特别的关键。

1)它获取监控数值的方法是拉形式

2)它有一个存储数据的时序数据库,查询言语灵敏,但不是SQL

3)有SDK、Agent、中心网关三种数据汇总方法

4)可以运用grafana替代它自带的丑八怪界面

5)可以细粒度装备报警,统一办理

了解了上面的组件,装置装备就顺畅的多。先把Prometheus下载下来,然后解压。

cd /opt
wget -c https://github.com/prometheus/prometheus/releases/download/v2.14.0/prometheus-2.14.0.linux-amd64.tar.gz
tar zxvf prometheus-2.14.0.linux-amd64.tar.gz

在装置目录下修改装备文件 prometheus.yml ,咱们解说比较重要的部分。许多时分,咱们需求监控十分多的组件,比方体系状况、canal、kafka、jvm等等,假如将全部的装备文件都放在这儿,势必会又臭又长,所以一般选用子装备文件的方法。留意,装备文件分了两部分,上面的是触发规矩,下面的是主机称号,留意差异。

各个被监控的组件,需求自行布置Exporter,然后把http接口露出出来。

alerting:
 alertmanagers:
 - static_configs:
 - targets: [ 10.81.28.227:9093 ]
# 分文件装备,咱们以sys体系参数为例阐明
rule_files:
 - sys_monit.yml 
 - kafka_monit.yml 
# 抓取装备
scrape_configs:
 - job_name: 'prometheus'
 static_configs:
 - targets: ['localhost:9090']
 labels:
 group: 监控服务端 
 - job_name: 'system'
 #经过文件去动态发现装备
 file_sd_configs:
 - refresh_interval: 1m
 files:
 - sys.yml #装备文件途径
 - job_name: 'kafka'
 file_sd_configs:
 - refresh_interval: 1m
 files:
 - kafka.yml

再来看一下其间一个子装备文件 sys.yml ,它界说了一批要监控的机器。也便是到什么当地去找数据。

[
 labels : {
 job : shop001.web.pub.pro.ali.dc ,
 instance : system 
 targets : [ 10.174.88.9:9100 
]

然后咱们发动Prometheus:

nohup ./prometheus 

alertmanager需求独自下载,这种方法真是脑回路惊讶。

https://github.com/prometheus/alertmanager/releases

报警的装备文件分为两部分,其间一部分,放在上面的 prometheus.yml 文件中rule_files模块,用来指定匹配规矩;别的一部分,放在alertmanager.yml中,用来指定报警的去向。

比方,我想要把报警发送到臭名远扬的dingding,就可以这么写。

global:
 resolve_timeout: 5m
route:
 group_by: ['alertname']
 group_wait: 10s
 group_interval: 10s
 repeat_interval: 10m
 receiver: 'pro'
 routes:
 - receiver: 'canal'
 match:
 alertname: 'canal 推迟'
receivers:
- name: 'sys'
 webhook_configs:
 - url: 'http://10.81.28.227:8060/dingtalk/pro/send'
- name: 'canal'
 webhook_configs:
 - url: 'http://10.81.28.227:8060/dingtalk/canal/send'

接下来看一下规矩部分,比方sys_monit.yml,你应该看到这个进程是怎样工作起来的了。

roups:
 - name: netstat_tcp_time_wait
 rules:
 - alert: 主机连接数 time_wait
 expr: netstat_tcp_time_wait 60000
 for: 5m
 labels:
 status: warning
 annotations:
 summary: {{$labels.job}} 
 description: {{ $labels.instance }} time_wait 60k 

假如你装置了dashboard的话,应该能看到这些信息了。可是,每次更改阈值,都需求重启server,这一部分,做的不是很好。别的,yml深层的嵌套信息,在装备繁复的时分,显得比较凌乱。从上面的装备文件就可以看出,这些装备文件的解析,运用的是简略的占位符的方法。在规划报警之前,你需求知道每一个监控项的称号,以及含义。

telegraf是比较好用的数据搜集agent。一般,它是经过push的方法报告监控数据,可是经过参加几行装备,可以把push变成pull。首要的装备文件如下:

[[outputs.prometheus_client]]
 listen = 0.0.0.0:9100 

以下是一个grafana主机监控的效果图。因为它的颜值比prometheus自带的高,所以一般都运用grafana。

可是自带的UI也不是一无可取,比方下面检查整个体系机器状况的页面。

用于调试查询句子的界面等。

别的,prometheus可以很简略的接入以下的体系:

1) springboot。拜见

https://yq.aliyun.com/articles/272542

2) canal接入。在canal.properties 中增加

canal.metrics.pull.port=11112

留意:canal版别有必要canal 1.1.x系列以上

一个监控体系,首要的难点是生态。prometheus最近几年发展迅速,十分多的组件都对其进行了集成,这对咱们来说是比较大的福音。可是,它的装备文件仍是有点杂乱,尤其是在办理大型机器群的时分,需求频频的更改装备文件,并不可以做到主动发现。

所以,一般运用prometheus的时分,会合作许多内部体系,写许多的shell脚本,主动更改这些装备进行重启,尽量做到主动化。

因为触及的装备文件,实在是太多,且装备有相对的难度。我将这些信息,放在了仓库里。有需求的,自行参阅。

https://github.com/xjjdog/prometheus-cnf-pro

清单:

1、prometheus装备,规矩装备

2、alertmanager装备

3、telegraf

4、grafana,一个不允许程序员走弯路的大众号。聚集根底架构和Linux。十年架构,日百亿流量,与你讨论高并发国际,给你不一样的滋味。我的个人微信xjjdog0,欢迎增加老友,进一步沟通。

近期抢手文章

《 996的趣味,你是无法幻想的 》

魔幻实际主义,关爱神经衰弱

《 全部荒谬的高傲,皆来源于认知 》

不要被标题给骗了,画面感十足的消遣文章

《必看!java后端,亮剑诛仙》

后端技能索引,中肯火爆。全网转载上百次。

《学完这100多技能,能当架构师么?》

精准点评100多结构,帮你选型

《Linux上,最常用的一批指令解析》

点赞率1/8。

热门文章

随机推荐

推荐文章