服务监控与报警


服务监控与报警


正文

Prometheus介绍

Prometheus(普罗米修斯)是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。 不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter。 目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。 具体支持的源看:https://github.com/prometheus

与其他监控系统相比,Prometheus的主要特点是:

  1. 一个多维数据模型(时间序列由指标名称定义和设置键/值尺寸)。
  2. 非常高效的存储,平均一个采样数据占~3.5bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。
  3. 灵活的查询语言。
  4. 不依赖分布式存储,单个服务器节点。
  5. 通过基于HTTP的pull方式采集时序数据。
  6. 可以通过中间网关进行时序列数据推送。
  7. 通过服务发现或者静态配置来发现目标服务对象。
  8. 支持多种多样的图表和仪表板展示支持,比如Grafana等。

服务过程

Prometheus Daemon 负责定时去目标上抓取metrics(指标)数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。 Prometheus支持通过配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目标。Prometheus采用PULL的方式进行监控, 即服务器可以直接通过目标PULL数据或者间接地通过中间网关来Push数据。

Prometheus在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。

Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持很多方式的图表可视化, 例如Grafana、自带的Promdash以及自身提供的模版引擎等等。Prometheus还提供HTTP API的查询方式,自定义所需要的输出。

PushGateway支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。

Alertmanager是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。

三大套件
  1. Server 主要负责数据采集和存储,提供PromQL查询语言的支持。
  2. Alertmanager 警告管理器,用来进行报警。
  3. Push Gateway 支持临时性Job主动推送指标的中间网关。
服务器性能监控

我们下面使用Prometheus和Grafana对本机服务器性能进行监控。

监控本机,只需要一个exporter。 node_exporter,用于机器系统数据收集。

下面选择用docker实现Prometheus和Grafana。

node_exporter安装

node_exporter可以查看本机Linux服务相关内容。

下载镜像包:

sudo docker pull prom/node-exporter

启动node-exporter:

sudo docker run -d -p 9100:9100 \
  -v "/proc:/host/proc:ro" \
  -v "/sys:/host/sys:ro" \
  -v "/:/rootfs:ro" \
  --net="host" \
  prom/node-exporter

单行格式:

sudo docker run -d -p 9100:9100 -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" --net="host" prom/node-exporter

其中目录映射的:/proc 正在运行的内核信息映射,主要输出 进程信息、内存资源信息、磁盘分区信息等等;/sys 硬件设备的驱动程序信息。

等待几秒,查看端口是否起来:

netstat -anpt

访问url:http://127.0.0.1:9100/metrics ,可以看到收集到数据,有了它就可以做数据展示了。

Prometheus安装

下载镜像包:

sudo docker pull prom/prometheus

新建目录prometheus,编辑配置文件prometheus.yml:

mkdir ~/worksoft/prometheus

vim ~/worksoft/prometheus/prometheus.yml

写入配置并保存:

global:
  scrape_interval: 60s
  evaluation_interval: 60s

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
        labels:
          instance: prometheus

  - job_name: linux
    static_configs:
      - targets: ['192.168.44.171:9100']
        labels:
          instance: linux

注意:这里的192.168.44.171是本机ip地址。如果不知道,可以通过 ip addrifconfig 查看。 另外格式要格外注意,空格等不要错位。

启动prometheus:

sudo docker run  -d \
  -p 9090:9090 \
  -v /home/baiyang/worksoft/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml  \
  prom/prometheus

单行格式:

sudo docker run -d -p 9090:9090 -v /home/baiyang/worksoft/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

查看容器有没有运行起来:

sudo docker ps -a

查看端口状态:

netstat -anpt

访问url:http://127.0.0.1:9090/graphhttp://127.0.0.1:9090/targets 查看效果。

如果状态没有UP起来,等待一会,就会UP了。

Grafana安装

下载镜像包:

sudo docker pull grafana/grafana

新建空文件夹grafana-storage,用来存储数据:

mkdir ~/worksoft/grafana-storage

设置权限,因为grafana用户会在这个目录写入文件,直接设置777,比较简单:

chmod 777 -R ~/worksoft/grafana-storage

启动grafana:

sudo docker run -d \
  -p 3000:3000 \
  --name=grafana \
  -v /home/baiyang/worksoft/grafana-storage:/var/lib/grafana \
  grafana/grafana

单行格式:

sudo docker run -d -p 3000:3000 --name=grafana -v /home/baiyang/worksoft/grafana-storage:/var/lib/grafana grafana/grafana

访问url:http://127.0.0.1:3000, 查看效果,账号和密码都是admin。

然后添加数据源,添加图表 就可以用了。

在 配置 -> Data Sources -> Add data source 中选择具体数据源,有 Prometheus、 Elasticsearch、 MySQL 等。

连接Prometheus时不能用:http://127.0.0.1:9090, 因为grafana在docker容器中,要用docker内访问Prometheus的地址(上面配置过):http://192.168.44.171:9090

Linux监控

Linux监控模板,我们可以从网络上导入现成的,点击 Import , 输入 11074,导入Linux监控模板. 并配置数据源为上面添加好的数据源。 配置完保存后即可看到系统主机节点监控信息,包括系统运行时间, 内存和CPU的配置, CPU、内存、磁盘、网络流量等信息, 以及磁盘IO、CPU温度等信息。

RabbitMQ监控

在机子上安装rabbitmq_exporter:

tar -xvf rabbitmq_exporter-0.20.0.linux-amd64.tar.gz

cd rabbitmq_exporter-0.20.0.linux-amd64

RABBIT_USER=guest RABBIT_PASSWORD=guest OUTPUT_FORMAT=JSON PUBLISH_PORT=9099 RABBIT_URL=http://localhost:15672 nohup ./rabbitmq_exporter &

prometheus配置prometheus.yml:

global:
  scrape_interval:  60s
  evaluation_interval: 60s

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
        labels:
          instance: prometheus

  - job_name: linux
    static_configs:
      - targets: ['192.168.44.171:9100']
        labels:
          instance: localhost

  - job_name: rabbitmq
    static_configs:
      - targets: ['192.168.76.125:9099']
        labels:
          instance: rabbitmq

192.168.76.125:9099 是刚才配置的数据源。

重启服务(id是prometheus容器id):

sudo docker restart id

grafana中 + Import导入dashboards:

https://grafana.com/dashboards/2121

然后就可以看效果了:

百分位监控

看一下Es中的 实现原理 , 然后用grafana中的 Metric 的 Percentiles 实现。

grafana接入钉钉报警机器人

跟着 示例 配置。






参考资料

Prometheus+Grafana监控与报警 https://www.cnblogs.com/miaocbin/p/12009974.html

基于docker 搭建Prometheus+Grafana https://www.cnblogs.com/xiao987334176/p/9930517.html

linux下 /proc 和 /sys 详解 https://blog.csdn.net/z1026544682/article/details/98092139

grafana文档 https://grafana.com/docs/grafana/latest/

prometheus + grafana部署RabbitMQ监控 https://www.cnblogs.com/shhnwangjian/p/6879683.html

Using Elasticsearch in Grafana https://grafana.com/docs/grafana/latest/datasources/elasticsearch/

Grafana/Kibana搜索语句-Lucene查询语法详解(Lucene query syntax) https://blog.csdn.net/qq_23598037/article/details/99849781

使用 ElasticSearch Aggregations 进行统计分析 https://blog.csdn.net/zxjiayou1314/article/details/53837719

Grafana 的一些使用技巧 https://zhuanlan.zhihu.com/p/34005738

Lucene Query + ES + Grafana 资料搬运 https://zhuanlan.zhihu.com/p/66593935

Elasticsearch: 权威指南 » 聚合 » 近似聚合 » 百分位计算 https://www.elastic.co/guide/cn/elasticsearch/guide/current/percentiles.html

grafana接入钉钉报警机器人 https://zhuanlan.zhihu.com/p/141083658


返回