0%

Prometheus+Grafana监控环境搭建

Prometheus是一套开源的监控&报警&时间序列数据库的组合。

Grafana是一个跨平台的开源的度量分析和可视化工具。

Prometheus安装

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
version: '3'
services:
prometheus:
image: prom/prometheus:v2.22.0
container_name: prometheus
restart: always
network_mode: host
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
environment:
- TZ=Asia/Shanghai

配置prometheus.yml

新建文件prometheus.yml,添加如下配置:

配置文件详解:https://prometheus.io/docs/prometheus/latest/configuration/configuration

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
global:
scrape_interval: 15s
scrape_timeout: 10s
evaluation_interval: 15s
alerting:
alertmanagers:
- scheme: http
timeout: 10s
api_version: v1
static_configs:
- targets: []
scrape_configs:
- job_name: prometheus
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
static_configs:
- targets:
- localhost:9090

启动并测试

直接启动,然后访问9090端口查看是否成功

Grafana安装

建议通过下载安装包安装

下载安装包

因为docker安装的方式配置持久化很麻烦(不同版本的目录结构不一样)

https://grafana.com/grafana/download?platform=linux

docker-compose.yml(不推荐)

1
2
3
4
5
6
7
8
9
10
11
version: '3'
services:
grafana:
image: grafana/grafana:7.2.1
container_name: grafana
restart: always
network_mode: host
volumes:
- grafana-storage:/var/lib/grafana
environment:
- TZ=Asia/Shanghai

直接启动,然后访问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 的配置的方式为例:

  1. 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
  2. Dockerfile 添加如下内容:

    1
    2
    ADD jmx_prometheus_javaagent-0.16.1.jar jmx_prometheus_javaagent-0.16.1.jar
    ADD config.yaml config.yaml
  3. 新建 config.yaml 添加如下内容:

    1
    2
    3
    4
    5
    ---
    startDelaySeconds: 0
    ssl: false
    lowercaseOutputName: false
    lowercaseOutputLabelNames: false
  4. JVM 启动参数添加如下内容:

    1
    java -javaagent:./jmx_prometheus_javaagent-0.16.1.jar=28080:config.yaml -jar app.jar
  5. prometheus 配置文件中 scrape_configs 下添加 job:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    scrape_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
  6. 重启 prometheus

  7. 访问Grafana主页,点击左侧边栏进入十 -> Import,输入 id:8563,直接 load 即可。

监控MySQL

先部署mysqld-exporter采集mysql数据

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
version: '3'
services:
mysqld-exporter:
image: prom/mysqld-exporter
container_name: mysqld-exporter
restart: always
network_mode: host
environment:
DATA_SOURCE_NAME: "safesteady:3cd6ae8e31b44542af1c64084601bbd3@(10.96.104.53:33360)/"
TZ: Asia/Shanghai

配置Prometheus

修改prometheus的prometheus.yml,添加如下内容

1
2
3
- job_name: '74-mysql'
static_configs:
- targets: ['10.32.95.220:9104']

然后映射配置文件./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
2
3
4
5
6
7
8
9
10
11
version: '3'
services:
redis_exporter:
image: oliver006/redis_exporter
container_name: redis_exporter
restart: always
network_mode: host
environment:
- REDIS_ADDR=redis://10.93.121.143:6379
- REDIS_PASSWORD=ouAVX2fdaBxh6Mfa
- TZ=Asia/Shanghai

配置Prometheus

修改prometheus的prometheus.yml

如果是监控Redis单点,添加如下内容:

1
2
3
- job_name: redis_cluster
static_configs:
- targets: ['10.93.121.143:9121']

如果是监控Redis集群,添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- job_name: 'safety_redis_cluster'
static_configs:
- targets:
- 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
metrics_path: /scrape
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 10.93.121.143:9121
- job_name: 'safety_redis_exporter'
static_configs:
- targets:
- 10.93.121.143:9121

然后映射配置文件./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
2
3
4
5
6
7
8
9
10
version: '3'
services:
kafka-exporter:
image: danielqsj/kafka-exporter
container_name: kafka-exporter
restart: always
network_mode: host
command: --kafka.server=10.83.198.130:9092 --kafka.server=10.83.198.131:9092 --kafka.server=10.83.198.132:9092 --kafka.version=0.10.1.0
environment:
- TZ=Asia/Shanghai

配置Prometheus

修改prometheus的prometheus.yml,添加如下内容

1
2
3
- job_name: kafka_cluster
static_configs:
- targets: ['10.32.95.220:9308']

然后映射配置文件./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
2
3
4
5
6
7
8
9
10
11
12
13
version: '3'
services:
elasticsearch_exporter:
image: justwatch/elasticsearch_exporter:1.1.0
container_name: elasticsearch_exporter
restart: always
command:
- '--es.uri=http://10.86.52.77:9200'
restart: always
ports:
- "10.32.95.220:9114:9114"
environment:
- TZ=Asia/Shanghai

配置Prometheus

修改prometheus的prometheus.yml,添加如下内容

1
2
3
- job_name: es_cluster
static_configs:
- targets: ['10.32.95.220:9114']

然后映射配置文件./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
2
3
4
5
6
7
8
9
<prometheus>
<endpoint>/metrics</endpoint>
<port>9363</port>

<metrics>true</metrics>
<events>true</events>
<asynchronous_metrics>true</asynchronous_metrics>
<status_info>true</status_info>
</prometheus>

配置Prometheus

1
2
3
- job_name: clickhouse1
static_configs:
- targets: ['10.104.122.26:9363']

配置Dashboards

访问Grafana主页,点击左侧边栏进入十 -> Import,输入 id:13500,直接 load 即可。

监控HBase集群

  1. 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
  2. 在需要监控的 HBase 实例 conf/hbase-env.sh 中设置 JMX exporter 的 agent

    1
    2
    3
    export 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。

  3. 配置 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: .+
  4. 重启 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
  5. 配置Dashboards

    访问Grafana主页,点击左侧边栏进入十 -> Import,输入 id:12243,直接 load 即可。

坚持原创技术分享,您的支持将鼓励我继续创作!