Centos安装Prometheus、Grafana监控Kafka及Linux主机

601 阅读5分钟

安装并运行 node_exporter

  1. 下载 node_exporter
  2. 解压到指定 /app/exporter
  3. 编写管理脚本control_node_exporter.sh,并给予权限 chmod + x control_node_exporter.sh,脚本内容如下:
#!/bin/bash

PID_FILE="node_exporter.pid"
LOG_FILE="node_exporter.log"
CMD="/app/exporter/node_exporter-1.6.1.linux-amd64/node_exporter"

function start {
    nohup $CMD > $LOG_FILE 2>&1 &
    echo $! > $PID_FILE
    echo "Started Node Exporter, pid: $(cat $PID_FILE)"
}

function stop {
    kill $(cat $PID_FILE)
    rm $PID_FILE
    echo "Stopped Node Exporter"
}

function status {
    if [ -f $PID_FILE ]; then
        pid=$(cat $PID_FILE)

        if ps -p $pid > /dev/null; then
            echo "Node Exporter is running, pid: $pid"
            echo "Start time: $(ps -p $pid -o lstart=)"
            echo "Running time: $(ps -p $pid -o etime=)"
            echo "Started by user: $(ps -p $pid -o user=)"
        else
            echo "Node Exporter is not running"
        fi
    else
        echo "Node Exporter is not running"
    fi
}

case $1 in
"start")
    start
;;
"stop")
    stop
;;
"status")
    status
;;
*)
    echo "Usage: $0 {start|stop|status}"
;;
esac
  1. 执行命令 ./control_node_exporter start 启动 node_exporter.

验证 node_exporter 是否启动成功:

  1. 查看同级目录下的 node_exporter.log 日志
  2. 浏览器访问 host:9100,是否看到下面的页面

image.png

安装并运行 kafka_exporter

  1. 下载 kafka_exporter
  2. 解压到指定 /app/exporter
  3. 编写启动脚本 control.sh,并给予权限 chmod + x control.sh,脚本内容如下:
#!/bin/bash

PID_FILE="kafka_exporter.pid"
LOG_FILE="kafka_exporter.log"
CMD="/home/lbs/software/exporter/kafka_exporter/kafka_exporter"
KAFKA_SERVERS="--kafka.server=one:9092 --kafka.server=two:9092 --kafka.server=three:9092"

function start {
    if [ -f $PID_FILE ]; then
        echo "Kafka Exporter is already running, pid: $(cat $PID_FILE)"
    else
        nohup $CMD $KAFKA_SERVERS > $LOG_FILE 2>&1 &
        echo $! > $PID_FILE
        echo "Started Kafka Exporter, pid: $(cat $PID_FILE)"
    fi
}

function stop {
    if [ -f $PID_FILE ]; then
        kill $(cat $PID_FILE)
        rm $PID_FILE
        echo "Stopped Kafka Exporter"
    else
        echo "Kafka Exporter is not running"
    fi
}

function status {
    if [ -f $PID_FILE ]; then
        pid=$(cat $PID_FILE)

        if ps -p $pid > /dev/null; then
            echo "Kafka Exporter is running, pid: $pid"
            echo "Start time: $(ps -p $pid -o lstart=)"
            echo "Running time: $(ps -p $pid -o etime=)"
            echo "Started by user: $(ps -p $pid -o user=)"
            tail -n 5 $LOG_FILE
        else
            echo "Kafka Exporter pid file exists but process is not running"
        fi
    else
        echo "Kafka Exporter is not running"
    fi
}

case $1 in
    "start")
        start
    ;;
    "stop")
        stop
    ;;
    "status")
        status
    ;;
    *)
        echo "Usage: $0 {start|stop|status}"
    ;;
esac

其中 --kafka.server=two:9092 --kafka.server=three:9092 --kafka.server=four:9092 的作用是指定 Kafka 的集群地址(注意:一定要写上所有的节点地址)

CMD 为 kafka_exporter 命令的绝对路径

  1. 执行命令 ./control.sh start 启动 kafka_exporter.

验证 kafka_exporter 是否启动成功:

  1. 查看同级目录下的 kafka_exporter.log 日志
  2. 浏览器访问 host:9308,是否看到下面的页面

image.png

安装并运行 Prometheus

  1. 下载 Prometheus
  2. 解压到 /app/prometheus 目录,然后进入解压后的目录,编写配置文件promethues.yml
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

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

    static_configs:
      - targets: ["localhost:9090"]
  
  # 新增部分: node_exporter 本机服务器监控
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']

  # 新增部分: kafka_exporter kafka集群监控 
  - job_name: 'kafka'
    static_configs:
      - targets: ['localhost:9308']
  1. 编写管理脚本control_prometheus.sh,并给予执行权限 chmod +x control_prometheus.sh,脚本内容如下:
#!/bin/bash

PID_FILE="prometheus.pid"
LOG_FILE="prometheus.log"
CMD="/app/prometheus/prometheus-2.48.0-rc.2.linux-amd64/prometheus --config.file=prometheus.yml"

function start {
    nohup $CMD > $LOG_FILE 2>&1 &
    echo $! > $PID_FILE
    echo "Started Prometheus, pid: $(cat $PID_FILE)"
}

function stop {
    kill $(cat $PID_FILE)
    rm $PID_FILE
    echo "Stopped Prometheus"
}

function status {
    if [ -f $PID_FILE ]; then
        pid=$(cat $PID_FILE)

        if ps -p $pid > /dev/null; then
            echo "Prometheus is running, pid: $pid"
            echo "Start time: $(ps -p $pid -o lstart=)"
            echo "Running time: $(ps -p $pid -o etime=)"
            echo "Started by user: $(ps -p $pid -o user=)"
        else
            echo "Prometheus is not running"
        fi
    else
        echo "Prometheus is not running"
    fi
}

case $1 in
"start")
    start
;;
"stop")
    stop
;;
"status")
    status
;;
*)
    echo "Usage: $0 {start|stop|status}"
;;
esac

验证 prometheus 是否启动成功:

  1. tail -fn 1000 prometheus.log
  2. 浏览器打开 http://host:9090,是否可以看到 prometheus 的 web ui.

image.png

验证 node_exporter 配置和 kafka_exporter 监控配置是否生效: 主页分别执行以下命令,看是否有数据。

  1. rate(node_cpu_seconds_total{mode="system"}[1m]),验证 node_exporter 是否正常。 image.png
  2. kafka_broker_info,验证 kafka_exporter 是否正常。 image.png

有数据就正常

安装运行并配置 grafana

这里我采用了 docker 安装,简单快速,后面可能会补充二进制的安装方式

第一步:确保安装有 docker

查看 docker 版本

docker -v

第二步:拉取镜像

镜像有哪些版本,可以通过查看一个 docker 镜像有哪些版本查看

# 你也可以直接拉docker pull grafana/grafana, 即拉取最新的镜像docker pull grafana/grafana:lastest
docker pull grafana/grafana:9.3.2

第三步:准备相关挂载目录及文件

准备目录

# /opt/grafana/data目录,准备用来挂载放置grafana的数据
# /opt/grafana/plugins目录,准备用来放置grafana的插件
# /opt/grafana/config目录,准备用来挂载放置grafana的配置文件
mkdir -p /opt/grafana/{data,plugins,config}
# 授权相关文件夹权限
chmod -R 777 /opt/grafana/data
chmod -R 777 /opt/grafana/plugins
chmod -R 777 /opt/grafana/config

准备配置文件

# 先临时启动一个容器
docker run --name grafana-tmp -d -p 3000:3000 grafana/grafana:9.3.2
# 将容器中默认的配置文件拷贝到宿主机上
docker cp grafana-tmp:/etc/grafana/grafana.ini /opt/grafana/config/grafana.ini
# 移除临时容器
docker stop grafana-tmp
docker rm grafana-tmp

# 修改配置文件(需要的话)
# vim /opt/grafana/config/grafana.ini

第四步:启动容器

# 启动prometheus
# 环境变量GF_SECURITY_ADMIN_PASSWORD:指定admin的密码
# 环境变量GF_INSTALL_PLUGINS:指定启动时需要安装得插件
#         grafana-clock-panel代表时间插件
#         grafana-simple-json-datasource代表json数据源插件
#         grafana-piechart-panel代表饼图插件
docker run -d \
    -p 3000:3000 \
    -net=host \
    --name=grafana \
    -v /etc/localtime:/etc/localtime:ro \
    -v /opt/grafana/data:/var/lib/grafana \
    -v /opt/grafana/plugins/:/var/lib/grafana/plugins \
    -v /opt/grafana/config/grafana.ini:/etc/grafana/grafana.ini \
    -e "GF_SECURITY_ADMIN_PASSWORD=admin" \
    -e "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource" \
    grafana/grafana:9.3.2

如果容器没有起来,报错下载插件失败的话,-e "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource" \ 这行可以先删除掉,后面手动下载插件解压放到/opt/grafana/plugins/中。

第五步:访问测试

访问{ip}:3000即可,使用账密 admin/admin 进行登录即可

第六步:使用测试

  1. 添加数据源

    选择普罗米修斯作为数据源

  2. 导入 node 仪表盘

image.png

image.png 输入:12633,点击右边的Load

image.png 选择 prometheus,然后 Import

image.png 最后,顺便点一下其他地方,选择保存面板

image.png

  1. 导入 kafka 仪表盘

和导入 node 一样的操作,只不过导入的 ID 变为了 7589

image.png 其他步骤省略,看最终成果。

image.png

安装运行 alertmanager

暂时不需要,补一个链接,这里有docker安装prometheus、Grafana、node_export、alertmanager