在5分钟内使用Prometheus和Grafana监视Linux服务器性能

时间:2020-02-23 14:30:57  来源:igfitidea点击:

Prometheus是一种开源监视解决方案,可将其所有数据存储在时间序列数据库中。
Prometheus具有多维数据模型和强大的查询语言,可用于生成有关所监视资源的报告。
本教程说明了如何使用Prometheus和Grafana监视Linux服务器的性能。

Prometheus节点导出器导出* NIX内核公开的硬件和操作系统指标,以供Prometheus使用。
该导出器使用可插入的度量标准收集器用Go编写。

设定程序

安装Prometheus和Grafana在要监视的Linux服务器上安装Prometheus Node Exporter配置节点出口程序配置带有Scrap作业的Prometheus服务器将仪表板添加到Grafana开始在Grafana上可视化系统指标用于Prometheus和Grafana的安装使用:在CentOS 7/Ubuntu/Debian上安装Prometheus Server
如何在Ubuntu上安装Grametha和Debian在CentOS 7上安装Grafana和InfluxDB

步骤1:添加Prometheus系统用户

我们将添加一个用户帐户以运行nod导出程序服务。
由于它无权访问交互式shell程序和主目录,因此很安全。

sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheu

我们添加了一个名为 prometheus其默认组是 prometheus

步骤2:下载并安装Prometheus Node Exporter

接下来是Prometheus Node导出器的最新版本:

curl -s https://api.github.com/repos/prometheus/node_exporter/releases/latest | grep browser_download_url | grep linux-amd64 |  cut -d '"' -f 4 | wget -qi 

解压缩下载的文件:

tar xvf node_exporter-*linux-amd64.tar.gz

将下载的文件移至/usr/local/bin目录:

cd node_exporter*/
sudo mv node_exporter /usr/local/bin/

可以使用以下命令确认安装的版本:

$node_exporter  --version
node_exporter, version 0.18.1 (branch: HEAD, revision: 3db77732e925c08f675d7404a8c46466b2ece83e)
  build user:       Hyman@theitroad
  build date:       20190604-16:41:18
  go version:       go1.12.5

步骤3:配置Prometheus Node Exporter systemd/Init脚本

收集器通过提供一个 --collector.@@@name>标记。
默认情况下启用的收集器可以通过提供一个 --no-collector.@@@name>旗帜。

sudo vim /etc/systemd/system/node_exporter.service

添加以下内容:

[Unit]
Description=Prometheus
Documentation=https://github.com/prometheus/node_exporter
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/local/bin/node_exporter \
    --collector.cpu \
    --collector.diskstats \
    --collector.filesystem \
    --collector.loadavg \
    --collector.meminfo \
    --collector.filefd \
    --collector.netdev \
    --collector.stat \
    --collector.netstat \
    --collector.systemd \
    --collector.uname \
    --collector.vmstat \
    --collector.time \
    --collector.mdadm \
    --collector.zfs \
    --collector.tcpstat \
    --collector.bonding \
    --collector.hwmon \
    --collector.arp \
    --web.listen-address=:9100 \
    --web.telemetry-path="/metrics"

启动服务并启用它以在启动时启动:

sudo systemctl start node_exporter
sudo systemctl enable node_exporter

步骤4:配置防火墙

如果服务器上有活动的防火墙,例如firewalld,ufw,开放端口 9100

sudo ufw allow 9100

对于CentOS 7系统,请使用 firewalld

sudo firewall-cmd --add-port=9100/tcp --permanent
sudo firewall-cmd --reload

对于像CentOS 6这样的Init Linux系统,我们可以使用 daemonize在后台启动服务。
安装 daemonize

sudo yum install daemonize
sudo apt-get install daemonize

安装完成后,创建 node_exporter初始化脚本:

sudo vim /etc/init.d/node_exporter

添加以下脚本:

#!/bin/bash
# Author: Josphat Mutai, Hyman@theitroad , https://github.com/jmutai
# node_exporter     This shell script takes care of starting and stopping Prometheus apache exporter
## chkconfig: 2345 80 80
# description: Prometheus apache exporter  start script
# processname: node_exporter
# pidfile: /var/run/node_exporter.pid
# Source function library.
. /etc/rc.d/init.d/functions
RETVAL=0
PROGNAME=node_exporter
PROG=/usr/local/bin/${PROGNAME}
RUNAS=prometheus
LOCKFILE=/var/lock/subsys/${PROGNAME}
PIDFILE=/var/run/${PROGNAME}.pid
LOGFILE=/var/log/${PROGNAME}.log
DAEMON_SYSCONFIG=/etc/sysconfig/${PROGNAME}
# GO CPU core Limit
#GOMAXPROCS=$(grep -c ^processor /proc/cpuinfo)
GOMAXPROCS=1
# Source config
. ${DAEMON_SYSCONFIG}
start() {
    if [[ -f $PIDFILE ]] > /dev/null; then
        echo "node_exporter  is already running"
        exit 0
    fi
    echo -n "Starting node_exporter  service…"
    daemonize -u ${USER} -p ${PIDFILE} -l ${LOCKFILE} -a -e ${LOGFILE} -o ${LOGFILE} ${PROG} ${ARGS}
    RETVAL=$?
    echo ""
    return $RETVAL
}
stop() {
    if [ ! -f "$PIDFILE" ] || ! kill -0 $(cat "$PIDFILE"); then
        echo "Service not running"
        return 1
    fi
    echo 'Stopping service…'
    #kill -15 $(cat "$PIDFILE") && rm -f "$PIDFILE"
    killproc -p ${PIDFILE} -d 10 ${PROG}
    RETVAL=$?
    echo
    [ $RETVAL = 0 ] && rm -f ${LOCKFILE} ${PIDFILE}
    return $RETVAL
}
status() {
    if [ -f "$PIDFILE" ] || kill -0 $(cat "$PIDFILE"); then
      echo "apache exporter  service running..."
      echo "Service PID: `cat $PIDFILE`"
    else
      echo "Service not running"
    fi
     RETVAL=$?
     return $RETVAL
}
# Call function
case "" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        status
        ;;
    *)
        echo "Usage: 
sudo vim /etc/sysconfig/node_exporter
{start|stop|restart}" exit 2 esac

创建参数配置文件:

"--collector.cpu \
--collector.diskstats \
--collector.filesystem \
--collector.loadavg \
--collector.meminfo \
--collector.filefd \
--collector.netdev \
--collector.stat \
--collector.netstat \
--collector.systemd \
--collector.uname \
--collector.vmstat \
--collector.time \
--collector.mdadm \
--collector.xfs \
--collector.zfs \
--collector.tcpstat \
--collector.bonding \
--collector.hwmon \
--collector.arp \
--web.listen-address=:9100

添加:

# /etc/init.d/node_exporter
Usage: /etc/init.d/node_exporter {start|stop|restart}

测试脚本:

sudo systemctl start node_exporter
sudo systemctl enable node_exporter

步骤5:启动Prometheus节点导出器服务

对于systemd,开始使用:

sudo /etc/init.d/node_exporter start
sudo chkconfig node_exporter on

对于Init系统,请使用:

$sudo /etc/init.d/node_exporter status
apache exporter  service running...
Service PID: 1970
$sudo chkconfig --list | grep node_exporter
node_exporter 0:off   1:off   2:on    3:on    4:on    5:on    6:off
$sudo ss -tunelp | grep 9100
tcp    LISTEN     0      128      :::9100                 :::*                   users:(("node_exporter",pid=16105,fd=3)) uid:997 ino:193468 sk:ffff8a0a76f52a80 v6only:0 <->

我们可以使用以下方法进行验证:

# Linux Servers
  - job_name: apache-linux-server1
    static_configs:
      - targets: ['10.1.10.20:9100']
        labels:
          alias: server1
  - job_name: apache-linux-server2
    static_configs:
      - targets: ['10.1.10.21:9100']
        labels:
          alias: server2

步骤6:将导出程序作业添加到Prometheus

最后的第二步是将作业添加到Prometheus服务器以刮取度量标准。
编辑 /etc/prometheus/prometheus.yml

sudo systemctl restart prometheus

重新开始 prometheus刮刮服务

$telnet 10.1.10.20 9100
Trying 10.1.10.20...
Connected to 10.1.10.20.
Escape character is '^]'.
^]

测试对端口的访问 9100从Prometheus服务器

##代码##

第7步:将仪表板添加到Grafana

我们可以创建自己的Grafana仪表板,也可以从社区共享仪表板的集合中导入。
以下是仪表盘列表,该仪表盘比为显示* NIX服务器的经典系统指标而创建的仪表盘推荐使用:https://grafana.com/grafana/dashboards/8919https://grafana.com/dashboards/159 https://grafana.com/dashboards/3662 https://github.com/percona/grafana-dashboards https://github.com/rfrail3/grafana-dashboards出于演示目的,我们将使用ID为159的第一个仪表板。
添加Prometheus数据在将Prometheus数据源添加到Grafana的情况下,通过导航到"仪表板">"导入"来导入Apache Grafana仪表板。
使用159作为Grafana仪表板ID。

给它起一个描述性名称,然后选择之前添加的Prometheus数据源。

单击"导入"按钮开始使用仪表板。
几分钟后,指标应开始显示。