Prometheus+Grafana监控
- 一、Prometheus介绍
- 二、监控组件
- node-exporter
- mysqld-exporter
- cadvisor
- prometheus
- 三、Grafana 展示平台
- docker启动
- 配置Data sources
- 导入Dashboard模板
- Linux主机监控
- Mysql监控
- Nginx监控
- Redis监控
- PostgreSQL监控
- Kafka监控
- ElasticSearch监控
一、Prometheus介绍
Prometheus(普罗米修斯)是一套开源的监控、报警、时间序列数据库的组合。
Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如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、Grafana、CAdvisor、node-exporter、mysqld-exporter对本机服务器性能、Docker容器、MySQL数据库进行监控。
-
node-exporter 用于机器系统数据收集
-
mysqld-exporter 用于MySQL数据库数据收集
-
redis-exporter 用于Redis缓存数据库的数据收集
-
cadvisor 用于收集宿主机上的docker容器数据
-
prometheus 用于周期性抓取被监控组件的状态
-
Grafana是一个开源的功能丰富的数据可视化平台,通常用于时序数据的可视化
node-exporter
监控服务器CPU、内存、磁盘、I/O等信息,首先需要安装node exporter。node exporter的作用是用于机器系统数据收集。
由于node-exporter要获取主机的信息,最好直接部署到宿主机上。
Docker部署
docker run -d --name node-exporter --restart=always -p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" prom/node-exporter
浏览器访问: http://ip:9100/metrics,收集到数据,有了它就可以做宿主机Linux数据展示了
mysqld-exporter
用来收集MysQL或者Mariadb数据库相关指标的,mysql exporter需要连接到数据库并有相关权限。
Docker部署
docker run -d --name mysqld_exporter --restart=always -p 9104:9104 -e DATA_SOURCE_NAME="root:123456@(localhost:3306)/" prom/mysqld-exporter
浏览器访问: http://ip:9104/metrics,收集到数据,有了它就可以做MySQL数据库数据展示了
cadvisor
cadvisor可以对节点机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况。
Docker部署
docker run -d -p 8080:8080 --name cadvisor \
-v /:/rootfs:ro \
-v /var/run:/var/run:rw \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-v /dev/disk/:/dev/disk:ro --restart=always --privileged=true google/cadvisor
浏览器访问: http://ip:8080/metrics,收集到数据,有了它就可以做Docker容器数据展示了。
如果获取不到CPU的信息,可通过下方命令,进行挂载和建立软连接
sudo mount -o remount,rw '/sys/fs/cgroup'
sudo ln -s /sys/fs/cgroup/cpu,cpuacct /sys/fs/cgroup/cpuacct,cpu
prometheus
Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。
docker
docker run -d -p 9090:9090 --name prometheus \
-v /mnt/e/Docker/volumes/prometheus/:/prometheus \
-v /mnt/e/Docker/volumes/prometheus/data:/data \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
--restart=always prom/prometheus
注意:
宿主机的路径必须是绝对路径: /opt/prometheus/prometheus.yml,否则报错
prometheus.yml
global:
# 抓取间隔,60秒向目标抓取一次数据
scrape_interval: 60s
evaluation_interval: 60s
# 这里表示抓取对象的配置
scrape_configs:
- job_name: 'prometheus'
# 重写了全局抓取间隔时间,由60秒重写成30秒
scrape_interval: 30s
static_configs:
- targets: ['172.23.200.252:9090']
- job_name: 'mysqld'
static_configs:
- targets: ['172.23.200.252:9104']
- job_name: 'linux'
static_configs:
- targets: ['172.23.200.252:9100']
- job_name: 'docker'
static_configs:
- targets: ['172.23.200.252:8080']
浏览器访问: http://部署的机器IP地址:9090/graph ,效果如下
访问targets,http://部署的机器IP地址:9090/targets,效果如下。
三、Grafana 展示平台
Grafana是用于可视化大型测量数据的开源程序,他提供了强大和优雅的方式去创建、共享、浏览数据。Dashboard中显示了不同metric数据源中的数据。
Grafana是一个开源的,拥有丰富Dashboard和图表编辑的指标分析平台,和Kibana不同的是Grafana专注于时序类图表分析,而目支持多种数据源,如Graphite、 InfluxDB、Elasticsearch、Mysql、K8s、Zabbix、 Prometheus等。
docker启动
新建空文件夹grafana-storage,用来存储数据
mkdir /opt/grafana-storage
添加权限,因为grafana用户会在这个目录写入文件,直接设置777,也可以设置其它权限
chmod 777 -R /opt/grafana-storage
Docker部署
docker run -d --name grafana --restart=always -p 3000:3000 -v /opt/grafana-storage:/var/lib/grafana grafana/grafana
访问URL
http://部署机器的IP地址:3000
默认会先跳转到登录页面,默认的用户名和密码都是admin
登录之后,它会要求你重置密码。你还可以再输次admin密码!
密码设置完成之后,就会跳转到首页。
配置Data sources
点击Setting -> Data sources -> Add data source
选择Prometheus
name名字写Prometheus
ype 选择Prometheus,因为数据都从它那里获取
url 输入Prometheus的ip和端口
点击下面的Save & Test,如果出现绿色提示信息,说明可以了。
导入Dashboard模板
回到首页,Dashboard -> import 导入grafana监控模板,模板导入有三种方式:
- Upload JSON file 方式 导入json文件
- import via grafana.com 导入Url或id
- import via pannel json 导入json代码
官网下载Dashboard地址:https://grafana.com/grafana/dashboards
Linux主机监控
导入主机的监控模板,模板id为: 12633,填入import via grafana.com输入框内,点击【load】进入选项配置界面
选择Prometheus组件,点击【Import】保存就可以进行数据可视化展示
Mysql监控
导入Mysql模板,模板id为: 7362
Nginx监控
prometheus 监控 nginx 使用 nginx-vts-exporter 采集数据。同时,需要 nginx 支持 nginx-module-vts 模块获取 nginx 自身的一些数据。
nginx-vts
nginx,默认是没有nginx-module-vts模块的。需要下载对应的nginx源码,进行重新编译才行。为了快速演示,这里使用nginx-vts镜像,包含nginx和nginx-module-vts模块
docker run -d -it --name nginx -p 80:80 gaciaga/nginx-vts
此镜像已经默认开启了status,访问http://10.1.7.33/status
nginx-vts-exporter
主要用于收集nginx的监控数据,并给Prometheus提供监控接口,默认端口号9913。
docker run -d -it --name nginx-vts-exporter -e NGINX_STATUS="http://10.1.7.33/status/format/json" -p 9913:9913 sophos/nginx-vts-exporter
注意:请根据实际情况修改NGINX_STATUS变量,确保能正常访问。
浏览器访问: http://ip:9913/metrics,收集到数据,有了它就可以做Nginx数据展示了
修改prometheus.yml配置,增加nginx统计配置
- job_name: 'nginx'
static_configs:
- targets: ['10.1.7.33:9913']
重启prometheus
docker restart prometheus
导入Nginx模板,模板id为: 2949
Redis监控
prometheus监控redis需要用到redis_exporter。
启动redis_exporter
docker run -d --name redis_exporter -p 9121:9121 oliver006/redis_exporter --redis.addr redis://10.1.7.33:6379 --redis.password '你的密码'
参数说明:
--redis.addr:指明一个或多个 Redis 节点的地址,多个节点使用逗号分隔,默认为redis://localhost:6379
--redis.password:验证 Redis 时使用的密码;
--redis.file:包含一个或多个redis 节点的文件路径,每行一个节点,此选项与 --redis.addr 互斥。
--web.listen-address:监听的地址和端口,默认为 0.0.0.0:9121
修改prometheus.yml配置,增加redis统计配置
- job_name: 'redis'
static_configs:
- targets: ['10.1.7.33:9121']
重启prometheus
docker restart prometheus
导入Redis模板,模板id为: 11835
PostgreSQL监控
prometheus监控PostgreSQL需要用到postgres-exporter
docker启动
docker run -p 9187:9187 -d --name postgresqldb-exporter -e DATA_SOURCE_NAME="postgresql://swap:swap@piesat@10.1.100.167:5432/zxj_sdp_db?sslmode=disable" quay.io/prometheuscommunity/postgres-exporter
浏览器访问: http://ip:9187/metrics,收集到数据,有了它就可以做PostgreSQL数据展示了
修改prometheus.yml配置,增加postgres统计配置
- job_name: 'postgres'
static_configs:
- targets: ['172.23.200.252:9187']
重启prometheus
docker restart prometheus
压缩包启动
注意:docker直接启动有一个问题,无法监测到postgresql服务的启动时间。若要监测服务启动时间,需要添加自定义监测指标:
1.下载postgres_exporter插件
2.上传服务器并进行解压
tar -xzvf postgres_exporter-0.11.0.linux-amd64.tar.gz
3.添加环境变量
vim ~/.bash_profile
# 在文件最后加上新的路径
export DATA_SOURCE_NAME="postgresql://<你的用户>:<你的密码>@<数据库ip>:5432/zxj_sdp_db?sslmode=disable"
# 手动生效
source ~/.bash_profile
4.指定一个包含自定义查询语句的 YAML 文件,参考 queries.yaml
pg_postmaster:
query: "SELECT pg_postmaster_start_time as start_time_seconds from pg_postmaster_start_time()"
master: true
metrics:
- start_time_seconds:
usage: "GAUGE"
description: "Time at which postmaster started"
5.启动postgres_exporter
./postgres_exporter --web.listen-address :9187 --extend.query-path="/home/prometheus/postgresql/queries.yaml"
参数说明:
--web.listen-address:监听地址
--extend.query-path:指定一个包含自定义查询语句的 YAML 文件
导入PostgreSQ模板,模板id为: 9628
Kafka监控
docker安装kafka-exporter
docker run --name kafka-exporter -d -p 9308:9308 danielqsj/kafka-exporter --kafka.server=10.1.7.33:9092 --zookeeper.server=10.1.7.33:2181
浏览器访问: http://ip:9308/metrics,收集到数据,有了它就可以做kafka数据展示了
修改prometheus.yml配置,增加kafka统计配置
- job_name: 'kafka'
static_configs:
- targets: ['10.1.7.33:9308']
重启prometheus
docker restart prometheus
导入Kafka模板,模板id为: 7589
ElasticSearch监控
docker-compose启动elasticsearch-exporter
docker-compose.yml
version: "3.9"
services:
elasticsearch_exporter:
container_name: 'es_exporter'
image: prometheuscommunity/elasticsearch-exporter
command:
- '--es.uri=http://10.1.7.33:9200'
# 如果使用了身份验证 http://username:password@elasticsearch_address:9200
- '--es.all'
restart: always
ports:
- "9114:9114"
参数说明:
--es.uri 默认http://localhost:9200,连接到的Elasticsearch节点的地址(主机和端口)。 这可以是本地节点(例如localhost:9200),也可以是远程Elasticsearch服务器的地址
--es.all 默认flase,如果为true,则查询群集中所有节点的统计信息,而不仅仅是查询我们连接到的节点。
--es.cluster_settings 默认flase,如果为true,请在统计信息中查询集群设置
--es.indices 默认flase,如果为true,则查询统计信息以获取集群中的所有索引。
--es.indices_settings 默认flase,如果为true,则查询集群中所有索引的设置统计信息。
--es.shards 默认flase,如果为true,则查询集群中所有索引的统计信息,包括分片级统计信息(意味着es.indices = true)。
--es.snapshots 默认flase,如果为true,则查询集群快照的统计信息。
启动elasticsearch_exporter
docker-compose up -d
浏览器访问: http://ip:9114/metrics,收集到数据,有了它就可以做es数据展示了
修改prometheus.yml配置,增加elasticsearch统计配置
- job_name: 'elasticsearch'
static_configs:
- targets: ['10.1.7.33:9114']
重启prometheus
docker restart prometheus
导入elasticsearch模板,模板id为: 2322