联博开奖:图文详解Prometheus监控+Grafana+Alertmanager告警安装使用

admin 3个月前 (07-08) 科技 69 0

一:前言

一个服务上线了后,你想知道这个服务是否可用,需要监控。若是线上出故障了,你要先于主顾感知错误,你需要监控。另有对数据库,服务器的监控,等等各层面的监控。
近年来,微服务架构的盛行,服务数越来越多,监控指标变得越来越多,以是监控也变得越来越庞大,需要新的监控系统顺应这种转变。

以前我们用zabbix,StatsD监控,然则随着容器化,微服务的盛行,我们需要新的监控系统来顺应这种转变。于是监控项目Prometheus就应运而生。

二:Prometheus先容

先容

  • 网站地址:https://prometheus.io/
    https://prometheus.io/docs/introduction/overview/
    https://github.com/prometheus/docs

  • github:github.com/prometheus

Prometheus是一款基于时序数据库的开源监控告警系统,它是SoundCloud公司开源的,SoundCloud的服务架构是微服务架构,他们开发了许多微服务,由于服务太多,传统的监控已经无法知足它的监控需求,于是他们在2012就着手开发新的监控系统。Prometheus的原作者Matt T. Proud在2012年加入SoundCloud公司,他之前服务于Google公司,他从google的监控系统Borgmon中获取灵感,与另外一名工程师Julius Volz合作开发了开源监控系统Prometheus。(总之感受是由于有了这个前google工程师到来,才有能力开发了Prometheus)。厥后其他开发职员陆续加入了这个项目,并在 SoundCloud 内部继续开发,最终于 2015 年 1 月将其公布。厥后在2016年,SoundCloud把它捐献给了云原生基金会(Cloud Native Computing Foundation),在它下面继续孵化。

Prometheus是用go语言开发。它的许多理念跟google的SRE不约而同。以是有时间,可以去看看google SRE那本书,可以更好的明白Prometheus。

主要特征(功效)

  • 多维数据模型(时序由 metric 名字和 k/v 的labels组成)
  • 天真的查询语言(PromQL)
  • 无依赖的分布式存储;单节点服务器都是自治的
  • 接纳 http 协议,使用pull模式拉取数据,简朴易懂
  • 监控目的,可以接纳服务发现和静态设置方式
  • 支持多种统计数据模型和界面展示。可以和Grafana连系展示。

三:Prometheus架构原理

架构

来自官方的一张架构图

图片来自: https://prometheus.io/docs/introduction/overview/

主要模块

  • the main Prometheus Server,主要用于抓取数据和存储时序数据,另外还提供查询和 Alert Rule 设置治理。就是数据的采集和存储,用PromQL查询,报警设置。
  • client libraries,用于对接Prometheus Server,用于对接Prometheus Server,可以查询和上报数据。
  • a push gateway,用于批量,短期的监控数据的汇报总节点,主要用于营业数据汇报等。
  • 种种汇报数据的 exporters,例如汇报机械数据的node_exporter,汇报MondogDB信息的 MongoDB_exporter 等等。
  • 用于高级通知治理的 alertmanager 。
  • 林林总总的支持工具

怎么采集监控数据

要采集目的的监控数据,首先就要在被采集目的地方安装采集组件,这种采集组件被称为Exporter。prometheus.io官网上有许多这种exporter,官方 exporter列表。

采集完了怎么传输到Prometheus?

采集了数据,要传输给prometheus。怎么做?
Exporter 会露出一个HTTP接口,prometheus通过Pull模式的方式来拉取数据,会通过HTTP协议周期性抓取被监控的组件数据。
不外prometheus也提供了一种方式来支持Push模式,你可以将数据推送到Push Gateway,prometheus通过pull的方式从Push Gateway获取数据。

主要流程

  1. Prometheus server定期从静态设置的 targets 或者服务发现的 targets 拉取数据(zookeeper,consul,DNS SRV Lookup等方式)
  2. 当新拉取的数据大于设置内存缓存区的时刻,Prometheus会将数据持久化到磁盘,也可以远程持久化到云端。
  3. Prometheus通过PromQL、API、Console和其他可视化组件展示数据。Prometheus支持许多方式图表可视化,好比Grafana,自带的Promdash。它还提供HTTP API的查询方式,自定义输出。
  4. Prometheus 可以设置rules,然后准时查询数据,当条件触发的时刻,会将alert推送到设置的Alertmanager。
  5. Alertmanager收到告警的时刻,会凭据设置,聚合,去重,降噪,最后发出忠告。

四:安装Prometheus

要整好prometheus监控系统,照样有许多软件需要安装。
安装的主要组件如下:

  • Prometheus Server
  • 被监控工具exporter组件
  • 数据可视化工具 Grafana
  • 数据上报网关 push gateway
  • 告警系统 Alertmanager

第1种:直接安装

到官网下载最新版的Prometheus,下载地址。
由于它是用go开发的,可以做到开箱即用。

wget https://github.com/prometheus/prometheus/releases/download/v2.19.2/prometheus-2.19.2.linux-amd64.tar.gz

解压:

tar xvfz prometheus-2.19.2.linux-amd64.tar.gz

运行启动:

cd ./prometheus-2.19.2.linux-amd64
./prometheus --version
./prometheus --config.file=prometheus.yml

第2种:docker镜像安装

  1. 先在本机 /etc/docker/prometheus/ 下建立一个设置文件 vim prometheus.yml
global:
  scrape_interval: 15s
  external_labels:
    monitor: 'first-monitor'
scrape_configs:
  - job_name: prometheus
    scrape_interval: 5s
    static_configs:
      - targets: ['127.0.0.1:9090']

官方有一个模板:documentation/examples/prometheus.yml

设置参数可以参考这里: configuration,选择你安装版本所对应的设置信息。

  1. 执行下面docker下令:
提醒:请提前安装好docker。

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

上面的下令看起来有点不容易明白,重新排列花样后:

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

说明:

  • -p 9090:9090,用这个接口可以查看promethdus的web界面
  • -v /etc/docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    ,将服务器内陆的prometheus设置文件挂载到docker目录 /etc/prometheus/ 下,这个就是prometheus在容器中默认加载设置文件位置。 -v 参数就是将内陆的设置文件挂载到docker内里。

用上面的下令安装完后,会出来一个很长的id信息:

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

可以用 docker inspect + id 前面部门信息 这样的下令来查看容器运行时默认设置参数有哪些,这个信息内容很长,截取需要的部门来看:

# docker inspect cddc
[
{
"Id": "cddca15bad0eea0c249cb4a5dfe1a148d7779a00b0dd514c654c5cddce4e951d",
"Created": "2020-07-04T10:10:33.792265269Z",
"Path": "/bin/prometheus",
"Args": [
"--config.file=/etc/prometheus/prometheus.yml",
"--storage.tsdb.path=/prometheus",
"--web.console.libraries=/usr/share/prometheus/console_libraries",
"--web.console.templates=/usr/share/prometheus/consoles"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 18313,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-07-04T10:10:34.13215448Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:9f345bfa8fefdd9580d5bd951a99e105af38d6047878c4bfb7c5c0250f77998e",
"ResolvConfPath": "/var/lib/docker/containers/cddca15bad0eea0c249cb4a5dfe1a148d7779a00b0dd514c654c5cddce4e951d/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/cddca15bad0eea0c249cb4a5dfe1a148d7779a00b0dd514c654c5cddce4e951d/hostname",
"HostsPath": "/var/lib/docker/containers/cddca15bad0eea0c249cb4a5dfe1a148d7779a00b0dd514c654c5cddce4e951d/hosts",

可以看到上面的Args就是默认设置文件位置

设置文件

prometheus主设置文件

  • prometheus.yml , 主设置文件,四大块:global,alerting,rule_files,scrape_config

实在它另有许多其他设置文件,好比rules.yml,你可能会问,上面没有看到rules.yml这个文件?是的上面没有加。可以用这个下令加上:
-v /etc/docker/prometheus/rules.yml:/etc/prometheus/rules.yml
实在跟加上promethdus.yml下令是一样的。

设置参数项以及说明可以参考这里: configuration,选择你安装版本所对应的设置信息。

设置说明:

global:
  scrape_interval: 15s           #默认采集监控数据时间距离
  external_labels:
    monitor: 'first-monitor'
 
scrape_configs:                #监控工具设置
  - job_name: prometheus #义务名称
    scrape_interval: 5s       #每隔5s获取一次监控数据
    static_configs:          #监控工具地址
      - targets: ['127.0.0.1:9090']
 
   - job_name: server-redis  # 还可以加其他监控工具
      static_configs:
        - targets: ['192.168.10.20:9100']
          labels:   # 标签
            instance: server-redis

查看web界面

在浏览器上输入 http://127.0.0.1:9090/ , 若是显示下面的web界面,说明promethdus启动乐成:

五:Exporter采集监控信息

前面已经讲过,若是要监控服务器或者应用程序的种种信息,好比cpu、内存、网卡流量等等。就要在监控目的上安装指标网络程序,并露出HTTP接口供Prometheus拉取数据,这个指标网络程序就是Exporter。差别的指标需要差别的Exporter网络。

这种Exporter需要自己写吗?
一样平常不需要,官网上已经有大量的Exporter,上面我们已经列出过官网的Exporter清单 地址。
而且有的软件已经集成了Prometheus的Exporter,也就是说软件自己就提供了Prometheus需要的种种指标数据。最典型的就是k8s,他们是云原生基金会的第一和第二个项目。

若是需要特殊的监控,可能就要你自己写Exporter了。

实例: node-exporter监控服务器

上面prometheus已经安装好了,现在来安装一个Exporter监控实例。

来安装一个监控服务器主机cpu、内存和磁盘等信息的exporter,直接用node-exporter。它主要用于网络类 UNIX 系统的信息。

步骤:

1.先修改prometheus.yml信息,

global:
  scrape_interval: 15s
  external_labels:
    monitor: 'first-monitor'
scrape_configs:
  - job_name: prometheus
    scrape_interval: 5s
    static_configs:
      - targets: ['127.0.0.1:9090']
      - targets: ['127.0.0.1:9100'] # 这里最先增添的监控信息
        labels:
          group: 'local-node-exporter'

2.用docker安装并启动node-exporter:

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

3.然后重启docker prometheus,让适才修改的设置生效:

docker restart prometheus

4.在浏览器上直接输入: http://127.0.0.1:9090/targets。或者,你在界面上点击 Status 菜单 -> Targets 菜单,来浏览metrics信息。
若是你是在服务器上安装,那么这里的 127.0.0.1 就是服务器IP地址,或者域名。

浏览器输出的web界面如下:(我用的远程服务器测试,以是用了ip)

可以看到内里有一个 9100 端口的 metrics 毗邻,点进去后,就可以看到一些采集信息。
说明适才设置的node-exporter已经加入到prometheus的targets中了。如下图:
诚信在线  第1张

查看监控信息

点击web界面最上面的菜单 Graph
诚信在线  第2张

选择下面的 Graph,然后我们选择一个 node_memory_Active_bytes 来看一看,
诚信在线  第3张

然后点击 Execute 按钮 , 就会出来如下图所示图形:
诚信在线  第4张

六:可视化系统:Grafana

上面我们通过Prometheus自带的UI,查看差别指标视图,然则它的功效很简朴。若是需要壮大的展示系统,能定制差别指标的面板,支持差别类型的展示方式,如曲线图、热门图,TopN等,那么grafana对照合适。它可以对promethdus数据举行可视化的展示。

grafana是一个大型可视化系统,功效壮大,可以建立自己的自定义面板,支持多种数据泉源,
好比:OpenTSDB、Elasticsearch、Prometheus 等,可以到官网去查看支持的数据源种类,而且它插件也许多。

  • 官网
  • doc

安装

官网安装文档,它有差别平台安装的Doc。
我选择最简朴的一种,直接用docker安装,下令如下:

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

Docker安装完后,最后会出来一些提醒信息:

... ...
Digest:sha256:0e8b556a7fc9b95c03669509ec50be19c16b82b9e9078f79fa35a71f484bc047
Status: Downloaded newer image for docker.io/grafana/grafana:latest 97d1c768ce6c541fa58790ec97fd06783633833cd9e74b12c16266dd264f8d0f

说明安装乐成了。我们在浏览器上看看界面,输入下面地址:
http://127.0.0.1:3000/login
诚信在线  第5张

然后输入初始密码 admin/admin 登录进入。

我安装的版本是:Grafana v7.0.5

grafana设置

增添prometheus数据源并展示

1.点击如下图的Data Source:
诚信在线  第6张

2.点击 Add data source 按钮后,出来下面界面:
诚信在线  第7张

3.鼠标移到 Prometheus 上,点击 Select 按钮:
诚信在线  第8张

4.prometheus相关设置:
诚信在线  第9张

最主要设置获取数据的HTTP URL。

5.点击 save&test 按钮,它会提醒你是否设置乐成。

6.设置Dashboards
诚信在线  第10张

7.回到home
诚信在线  第11张

8:点击 prometheus
诚信在线  第12张

9:出来许多图表展示
诚信在线  第13张

其他dashboard模板设置

grafana不仅有我们上面设置的那些图表模板,它另有其他许多模板,我们也可以设置。
官方模板dashboard 地址。

好比我们查找node exportet的模板,https://grafana.com/grafana/dashboards?search=node%20exporter,有一个模板 downloads 对照多,
诚信在线  第14张

它的地址为:
https://grafana.com/grafana/dashboards/8919

我们在grafana上来设置这个dashboard,import进来:
诚信在线  第15张

可以填写id和url,我们填写id,为 8919:
诚信在线  第16张

点击 load 出来下面界面:
诚信在线  第17张

然后选择prometheus-1,点击 import, 出来如下图的界面:
诚信在线  第18张

七、告警通知

我们已经能够对网络的数据,通过grafana展示出来了,能查看数据。想一想,系统还缺失什么功效?

监控最主要的目的是什么?

  • 第一:监控系统是否正常
  • 第二:系统不正常时,可以见告相关职员实时的排查和排除问题,这就是告警通知。

以是,还缺一个告警通知的模块。
prometheus的告警机制由2部门组成:

  1. 告警规则
    prometheus会凭据告警规则rule_files,将告警发送给Alertmanager
  2. 治理告警和通知
    模块是Alertmanager。它卖力治理告警,去除重复的数据,告警通知。通知方式有许多如Email、HipChat、Slack、WebHook等等。

设置

1.告警规则设置

告警文档地址:告警规则官方文档。

我们新建立一个规则文件:alert_rules.yml,把它和prometheus.yml放在一起,官方有一个模板 Templating,直接copy过来:

groups:
- name: example
  rules:

  # Alert for any instance that is unreachable for >5 minutes.
  - alert: InstanceDown
    expr: up == 0
    for: 5m
    labels:
      severity: page
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."

  # Alert for any instance that has a median request latency >1s.
  - alert: APIHighRequestLatency
    expr: api_http_request_latencies_second{quantile="0.5"} > 1
    for: 10m
    annotations:
      summary: "High request latency on {{ $labels.instance }}"
      description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)"

上面规则文件大意:就是建立了2条alert规则 alert: InstanceDownalert: APIHighRequestLatency

  • InstanceDown 就是实例宕机(up==0)触发告警,5分钟后告警(for: 5m);
  • APIHighRequestLatency 示意有一半的 API 请求延迟大于 1s 时(api_http_request_latencies_second{quantile="0.5"} > 1)触发告警

更多rules规则说明,请看这里 recording_rules。

然后把alrt_rules.yml添加到prometheus.yml 里:
诚信在线  第19张

我们要把alert_rules.yml规则映射到docker里:
先用docker ps查看prometheus容器ID, CONTAINER ID: ac99a89d2db6, 停掉容器 docker stop ac99,然后删掉这个容器 docker rm ac99
重新启动容器:

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

启动时主要添加这个参数:-v /etc/docker/prometheus/alert_rules.yml:/etc/prometheus/alert_rules.yml

然后在浏览器上查看,rules是否添加乐成,在浏览器上输入地址 http://127.0.0.1:9090/rules
诚信在线  第20张

也可以查看alers情形,点击菜单 Alerts:
诚信在线  第21张

告警通知设置

alertmanager设置:
官方设置文档,官方设置例子。

在上面我们可以看到alerts页面的告警信息,然则怎么通知到研发和营业相关职员呢?这个就是由Alertmanager完成,先设置alertmanager文件 alertmanager.yml,:

global:
  resolve_timeout: 5m
route:
  group_by: ['example']  #与prometheus设置文件alert_rules.yml中设置规则名对应
  group_wait: 10s #报警等待时间
  group_interval: 10s #报警距离时间
  repeat_interval: 1m #重复报警距离时间
  receiver: 'web.hook' #告警处理方式,我们这里通过web.hook方式,也可以设置成邮件等方式
receivers:
  - name: 'web.hook'
    webhook_configs:
      - url: 'http://127.0.0.1:8080/example/test' #告警web.hook地址,告警信息会post到该地址,需要编写服务吸收该告警数据
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning' #目的告警状态
    equal: ['alertname', 'dev', 'instance']

启动alertmanager服务:

docker run -d -p 9093:9093 --name alertmanager -v /etc/docker/prometheus/alertmanager.yml:/etc/prometheus/alertmanager.yml prom/alertmanager

在浏览器上输入 : http://127.0.0.1:9093,泛起下面界面:
诚信在线  第22张

prometheus设置:
在promethdus加上下面的设置,

alerting:
  alertmanagers:
    - static_configs:
      - targets: ['127.0.0.1:9093'] 

设置说明:告诉prometheus,放生告警时,将告警信息发送到Alertmanager,Alertmanager地址为 http://127.0.0.1:9093
先docker rm 删除掉原来容器,在运行:

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

再次运行http://127.0.0.1:9093,正常说明设置乐成

若是您看到这里,以为还可以的话,随手点个 推荐,谈论一下,让更多人看到

八:参考链接

  • https://prometheus.io/docs/introduction/overview/
  • https://github.com/prometheus/prometheus
  • https://www.aneasystone.com/archives/2018/11/prometheus-in-action.html
  • https://github.com/prometheus/alertmanager
  • https://github.com/songjiayang/prometheus_practice
  • https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
  • https://grafana.com/
  • https://grafana.com/plugins
  • https://hub.docker.com/r/prom/prometheus/
  • https://www.bookstack.cn/read/prometheus-manual/prometheus

[完]

,

欧博手机版下载

欢迎进入欧博手机版下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

阳光在线声明:该文看法仅代表作者自己,与本平台无关。转载请注明:联博开奖:图文详解Prometheus监控+Grafana+Alertmanager告警安装使用

网友评论

  • (*)

最新评论

站点信息

  • 文章总数:334
  • 页面总数:0
  • 分类总数:8
  • 标签总数:479
  • 评论总数:159
  • 浏览总数:2969

标签列表