Prometheus是一套开源的监控&报警&时间序列数据库的组合。
Grafana是一个跨平台的开源的度量分析和可视化工具。
Prometheus安装
docker-compose.yml
1 | version: '3' |
配置prometheus.yml
新建文件prometheus.yml,添加如下配置:
配置文件详解:https://prometheus.io/docs/prometheus/latest/configuration/configuration
1 | global: |
启动并测试
直接启动,然后访问9090端口查看是否成功
Grafana安装
建议通过下载安装包安装
下载安装包
因为docker安装的方式配置持久化很麻烦(不同版本的目录结构不一样)
https://grafana.com/grafana/download?platform=linux
docker-compose.yml(不推荐)
1 | version: '3' |
直接启动,然后访问3000端口查看是否成功
配置Data Sources
访问Grafana主页,点击左侧边栏进入Configuration->Data Resources->Add data source,选择Prometheus

输入URL,如:10.93.121.143:9090
点击 Save and Test
导入Dashboards
可在Grafana官网选择Dashboards:https://grafana.com/grafana/dashboards
这里直接在Grafana的Data Resources中,选择Prometheus,然后选择Databoards,导入:Prometheus 2.0 Stats

监控 JVM
通过 JMX Exporter 暴露 JVM 监控指标,然后将其转换为 Prometheus 所认知的 metrics 格式,以便让 Prometheus 对其进行监控采集。
JMX Exporter 供了两种用法:
- 启动独立进程。JVM 启动时指定参数,暴露 JMX 的 RMI 接口,JMX-Exporter 调用 RMI 获取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。
- JVM 进程内启动(in-process)。JVM 启动时指定参数,通过 javaagent 的形式运行 JMX-Exporter 的 jar 包,进程内读取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。
官方不推荐使用第一种方式,一方面配置复杂,另一方面因为它需要一个单独的进程,而这个进程本身的监控又成了新的问题。
这里以 docker 的配置的方式为例:
从 JMX Exporter 官方网站 下载 JMX Exporter
1
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.16.1/jmx_prometheus_javaagent-0.16.1.jar
Dockerfile 添加如下内容:
1
2ADD jmx_prometheus_javaagent-0.16.1.jar jmx_prometheus_javaagent-0.16.1.jar
ADD config.yaml config.yaml新建 config.yaml 添加如下内容:
1
2
3
4
5
startDelaySeconds: 0
ssl: false
lowercaseOutputName: false
lowercaseOutputLabelNames: falseJVM 启动参数添加如下内容:
1
java -javaagent:./jmx_prometheus_javaagent-0.16.1.jar=28080:config.yaml -jar app.jar
prometheus 配置文件中 scrape_configs 下添加 job:
1
2
3
4
5
6
7
8
9
10scrape_configs:
- job_name: dydata
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
static_configs:
- targets:
- 10.93.121.233:28080重启 prometheus
访问Grafana主页,点击左侧边栏进入十 -> Import,输入 id:8563,直接 load 即可。
监控MySQL
先部署mysqld-exporter采集mysql数据
docker-compose.yml
1 | version: '3' |
配置Prometheus
修改prometheus的prometheus.yml,添加如下内容
1 | - job_name: '74-mysql' |
然后映射配置文件./prometheus.yml:/etc/prometheus/prometheus.yml
重启prometheus,然后访问promethues,查看Status->Targets页面,如下图:
注意状态必须为UP

配置Dashboards
可在 Grafana Dashboards 官网 搜索,这里选择:https://grafana.com/grafana/dashboards/7362,
访问Grafana主页,点击左侧边栏进入十 -> Import,输入json,然后load即可,如图:

监控Redis集群
先部署redis_exporter采集Redis集群数据
docker-compose.yml
1 | version: '3' |
配置Prometheus
修改prometheus的prometheus.yml
如果是监控Redis单点,添加如下内容:
1 | - job_name: redis_cluster |
如果是监控Redis集群,添加如下内容:
1 | - job_name: 'safety_redis_cluster' |
然后映射配置文件./prometheus.yml:/etc/prometheus/prometheus.yml
重启prometheus,然后访问promethues,查看Status->Targets页面,如下图:
注意状态必须为UP

配置Dashboards
可在 Grafana Dashboards 官网 搜索,这里选择:https://grafana.com/grafana/dashboards/11835,
访问Grafana主页,点击左侧边栏进入十 -> Import,输入json,然后load即可,如图:

补充:监控 Redis 集群时,会多出一个 redis_exporter,此时可以在 Grafana 设置中通过正则表达式过滤,如下:
1 | 10.93.121.45:6381|10.93.121.45:6382|10.93.121.143:6381|10.93.121.143:6382|10.93.121.233:6381|10.93.121.233:6382 |
监控Kafka集群
先部署mysqld-exporter采集kafka集群数据
docker-compose.yml
1 | version: '3' |
配置Prometheus
修改prometheus的prometheus.yml,添加如下内容
1 | - job_name: kafka_cluster |
然后映射配置文件./prometheus.yml:/etc/prometheus/prometheus.yml
重启prometheus,然后访问promethues,查看Status->Targets页面,如下图:
注意状态必须为UP

配置Dashboards
可在 Grafana Dashboards 官网 搜索,这里选择:https://grafana.com/grafana/dashboards/7589,
访问Grafana主页,点击左侧边栏进入十 -> Import,输入json,然后load即可,如图:

监控ES集群
先部署elasticsearch_exporter采集ES集群数据
docker-compose.yml
1 | version: '3' |
配置Prometheus
修改prometheus的prometheus.yml,添加如下内容
1 | - job_name: es_cluster |
然后映射配置文件./prometheus.yml:/etc/prometheus/prometheus.yml
重启prometheus,然后访问promethues,查看Status->Targets页面,es_cluster
状态必须为UP。
配置Dashboards
配置文件:https://github.com/justwatchcom/elasticsearch_exporter/edit/master/examples/grafana/dashboard.json
访问Grafana主页,点击左侧边栏进入十 -> Import,输入json,然后load即可,如图:

监控ClickHouse集群
ClickHouse 从 v20.1.2.4 开始,内置了对接 Prometheus 的功能,可以将其作为 Prometheus 的 Endpoint 服务,从而自动的将 metrics 、 events 和 asynchronous_metrics 三张系统的表的数据发送给 Prometheus。
配置ClickHouse
修改 /etc/clickhouse-server/config.xml,将 promethes 的相关注释打开。
1 | <prometheus> |
配置Prometheus
1 | - job_name: clickhouse1 |
配置Dashboards
访问Grafana主页,点击左侧边栏进入十 -> Import,输入 id:13500,直接 load 即可。
监控HBase集群
从 JMX Exporter 官方网站 下载 JMX Exporter
1
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.16.1/jmx_prometheus_javaagent-0.16.1.jar
在需要监控的 HBase 实例 conf/hbase-env.sh 中设置 JMX exporter 的 agent
1
2
3export HBASE_JMX_BASE="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=20101 -javaagent:$HBASE_HOME/lib/jmx_prometheus_javaagent-0.16.1.jar=27000:$HBASE_HOME/conf/hbase_jmx_config.yaml"
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=20102 -javaagent:$HBASE_HOME/lib/jmx_prometheus_javaagent-0.16.1.jar=27001:$HBASE_HOME/conf/hbase_jmx_config.yaml"设置完后,Master 的 jmx agent 端口是27000,RegionServer 的 jmx agent 端口是27001。
配置 hbase_jmx_config.yaml
在 hbase/conf 目录下创建 hbase_jmx_config.yaml ,写入配置内容,提取指定的 jmx 指标
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
lowercaseOutputName: true
lowercaseOutputLabelNames: true
rules:
- pattern: Hadoop<service=HBase, name=RegionServer, sub=Regions><>Namespace_([^\W_]+)_table_([^\W_]+)_region_([^\W_]+)_metric_(\w+)
name: HBase_metric_$4
labels:
namespace: "$1"
table: "$2"
region: "$3"
- pattern: Hadoop<service=(\w+), name=(\w+), sub=(\w+)><>([\w._]+)
name: hadoop_$1_$4
labels:
"name": "$2"
"sub": "$3"
- pattern: .+重启 HBase 进程
1
2
3
4# 关闭
cd /opt/hbase-2.0.5 && bin/stop-hbase.sh
# 启动
cd /opt/hbase-2.0.5 && bin/start-hbase.sh配置Dashboards
访问Grafana主页,点击左侧边栏进入十 -> Import,输入 id:12243,直接 load 即可。