欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

荐 Docker Prometheus(普罗米修斯)监控系统

程序员文章站 2022-03-18 09:42:25
目录一. Prometheus 概述1. 概述2. 监控系统作用及Prometheus的特点3. Prometheus 基本服务与作用4. 概念二. Prometheus部署1. docker部署prometheus2. prometheus.yml 模板3. 通过cAdvisor搜集容器资源使用信息4. 修改pometheus配置文件三. Grafana做可视化展示1. Grafana部署一. Prometheus 概述无监控不运维~1. 概述prometheus自16年k8s托管以来,几乎是容器...

一. Prometheus 概述

无监控不运维~

1. 概述

prometheus自16年k8s托管以来,几乎是容器技术应用的最广的监控系统,除了普罗米修斯,还有zabbix(图形界面友好,成熟,分级) 等 成熟的监控系统。

官方:
https://prometheus.io/
https://github.com/prometheus

2. 监控系统作用及Prometheus的特点

  • 装逼(给老板看)
  • 业务持续性(及时预警,监控)
  • 多维数据模型:由度量名称和键值对标识的时间序列数据 TSDB
  • PromQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询
  • 不依赖分布式存储,单个服务器节点可直接工作
  • 基于HTTP的pull方式采集时间序列数据
  • 推送时间序列数据通过PushGateway组件支持
  • 通过服务发现或静态配置发现目标
  • 多种图形模式及仪表盘支持(grafana)

3. Prometheus 基本服务与作用

荐
                                                        Docker Prometheus(普罗米修斯)监控系统

主要服务 作用
Prometheus Server 收集指标和存储时间序列数据,并提供查询接口
ClientLibrary 客户端库
Push Gateway 短期存储指标数据。主要用于临时性的任务
Exporters 采集已有的第三方服务监控指标并暴露metrics
Alertmanager 告警
Web UI 简单的Web控制台

左边的采集,中间服务,右边展示

4. 概念

实例(被监控端 Instances)
作业(实例的集合 Job)

二. Prometheus exporter cadvisor 的部署

官方文档:
https://prometheus.io/docs/prometheus/latest/installation/

Prometheus支持二进制,docker等部署方式

1. docker部署prometheus

配置文件需要自己写的

$ docker container run -itd -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometh eus/prometheus.yml prom/prometheus

2. prometheus.yml 模板

配置文件模板

# prometheus.yml 
# my global config
global:
#全局配置
#全局配置节点下的配置对所有其它节点都有效,同时也是其它节点的默认值。
  scrape_interval:     15s # 将刮擦间隔设置为每15秒一次。 默认值为每1分钟。
  evaluation_interval: 15s # 每15秒评估一次规则。 默认值为每1分钟。
  # scrape_timeout设置为全局默认值(10s)。

# Alertmanager configuration
alerting:
#告警配置
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# 一次加载规则,并根据全局'evaluation_interval'定期评估它们。
rule_files:
#规则配置
#规则配置包含记录规则配置和告警规则配置,节点下只是列出文件,具体配置在各个文件中。
  # - "first_rules.yml"
  # - "second_rules.yml"

# 一个仅包含一个要刮擦的端点的刮擦配置:
# 这里是普罗米修斯本身。
scrape_configs:
  # 作业名称作为标签“ job = <作业名称>”添加到从此配置中刮取的任何时间序列。
  - job_name: 'prometheus'
#抓取配置
#抓取配置可以有多个,一般来说每个任务(Job)对应一个配置。

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['localhost:9090']
#抓取实例目标
#目标地址列表,地址由主机+端口组成
  - job_name: "docker"
    static_configs:
    - targets: ['ip:8080']
#抓取配置
  - job_name: "Linux"ip
    static_configs:
    - targets: ['ip:9100']
#抓取配置

这是Prometheus自带的一个界面,通常用于 测试

荐
                                                        Docker Prometheus(普罗米修斯)监控系统

3. 监控目标

  • 容器服务
  • 主机服务

容器的监控指标概念
内存,cpu,硬盘,网络,状态

主机服务监控指标
一般使用 exporter 来监控主机服务
https://github.com/prometheus/node_exporter/

$ docker stats --no-stream 452f0102c634
$ docker stats --no-stream 452f0102c634 |awk '{print $3}'
主机 业务
主机一 做nginx容器,和 cAdvisor 采集,做主机服务,和 exporter 的采集
主机二 做pometheus监控(通过cAdvisor,exporter ),和Grafana可视化

4. 通过exporter搜集主机服务资源接口

因为主机监控的特殊性,官方不建议用docker监控主机服务,所以采用二进制本地安装
荐
                                                        Docker Prometheus(普罗米修斯)监控系统
下载exporter二进制文件安装

$ wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
$ tar -zxvf node_exporter-0.17.0.linux-amd64.tar.gz
$ mv node_exporter-0.17.0.linux-amd64 /usr/local/node_exporter

systemctl service 服务
systemctl service在两个目录中:
/etc/systemd/system
/usr/lib/systemd/system
一般自己创建的service 直接放在 /etc/systemd/system 之中

$ vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=https://prometheus.io

[Service]
Restart=on-failure
ExecStart=/usr/local/node_exporter/node_exporter

[Install]
WantedBy = multi-user.target
$ systemctl start node_exporter

node_exporter暴露一个9100端口

访问即可得到指标

荐
                                                        Docker Prometheus(普罗米修斯)监控系统

5. 通过cAdvisor搜集容器资源使用信息

官方:
https://github.com/google/cadvisor
https://grafana.com/grafana/download

cadvisor通过容器运行,通过本地映射。
这个是官方的文档,但这个下载链接是被墙了的

$ VERSION=v0.36.0 # use the latest release version from https://github.com/google/cadvisor/releases
$ sudo docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  --privileged \
  --device=/dev/kmsg \
  gcr.io/google-containers/cadvisor:$VERSION

所以一般先在国内拉取cadvisor,在进行容器的创建。

$ docker container run -d --volume=/:/rootfs:ro --volume=/var/run:/var/run:ro --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/dock er:ro --volume=/dev/disk/:/dev/disk:ro --publish=8080:8080 --detach=true --name=cadvisor google/cadvisor:latest

荐
                                                        Docker Prometheus(普罗米修斯)监控系统
荐
                                                        Docker Prometheus(普罗米修斯)监控系统

http://192.168.43.14:8080/metrics 暴露数据指标(接口),但cadvisor只负责采集,不负责存储,所以需要配合Prometheus

6. 修改pometheus配置文件

重启pometheus容器

荐
                                                        Docker Prometheus(普罗米修斯)监控系统

荐
                                                        Docker Prometheus(普罗米修斯)监控系统

数据也有了

荐
                                                        Docker Prometheus(普罗米修斯)监控系统

三. Grafana做可视化展示

1. Grafana

Grafana的部署很简单,是一个纯静态的系统,拉取镜像暴露一个端口即可,

$ docker pull grafana/grafana
$ docker container run -d --name=grafand -p 3000:3000 grafana/g rafana

默认账号密码 admin

社区有教程美化Grafana ,有需求可以看一下
https://grafana.com/tutorials/grafana-fundamentals/?utm_source=grafana_gettingstarted#2

荐
                                                        Docker Prometheus(普罗米修斯)监控系统
通过自己画或者社区导入自己喜欢的仪表盘
https://grafana.com/grafana/dashboards

推荐id:
nginx:193
linux:9276

2. 效果

荐
                                                        Docker Prometheus(普罗米修斯)监控系统
荐
                                                        Docker Prometheus(普罗米修斯)监控系统
荐
                                                        Docker Prometheus(普罗米修斯)监控系统

本文地址:https://blog.csdn.net/qq_38626043/article/details/107306860