一、添加Prometheus系统用户
sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus
我们添加了一个名为prometheus的系统用户,其默认组为prometheus,此用户帐户将用于运行nod导出程序服务,它是安全的,因为它无法访问交互式shell和主目录。
二、下载并安装Prometheus
在终端下:
wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
tar xvf node_exporter-0.17.0.linux-amd64.tar.gz
sudo mv node_exporter-0.17.0.linux-amd64/node_exporter /usr/local/bin/
rm -f node_exporter-0.17.0.linux-amd64.tar.gz
rm -rf node_exporter-0.17.0.linux-amd64
可以使用以下命令确认安装的版本:
# node_exporter --version
返回的信息为0.17.0版本即为安装成功。
三、配置Prometheus节点导出器systemd/Init脚本
通过提供--collector.标志来启用收集器。
默认情况下启用的收集器可以通过提供--no-collector.标志来禁用:
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"
SyslogIdentifier=node_exporter
Restart=always
[Install]
WantedBy=multi-user.target
启动该服务并使其在启动时启动:
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
下面需要配置防火墙,如果你的服务器上有活动防火墙,例如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 init脚本:
sudo vim /etc/init.d/node_exporter
添加以下脚本:
#!/bin/bash
# Author: Josphat Mutai, kiplangatmtai@gmail.com , 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 "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 2
esac
创建参数配置文件:
sudo vim /etc/sysconfig/node_exporter
增加以下内容:
ARGS="--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 \
--web.telemetry-path="/metrics"
测试脚本:
# /etc/init.d/node_exporter
Usage: /etc/init.d/node_exporter {start|stop|restart}
四、启动Prometheus节点导出器服务
对于systemd,请开始使用:
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
对于Init系统使用:
sudo /etc/init.d/node_exporter start
sudo chkconfig node_exporter on
你可以验证使用:
$ 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
五、将导出器作业添加到Prometheus
向Prometheus服务器添加作业以抓取指标,编辑/etc/prometheus/prometheus.yml:
# 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
重启prometheus服务以开始抓取:
sudo systemctl restart prometheus
从Prometheus服务器测试对端口9100的访问:
$ telnet 10.1.10.20 9100
Trying 10.1.10.20...
Connected to 10.1.10.20.
Escape character is '^]'.
^]
六、将仪表板添加到Grafana
你可以创建自己的Grafana仪表板,也可以从社区共享仪表板集合中导入。
出于演示目的,我们将使用ID为159的第一个仪表板(https://grafana.com/dashboards/159)。
将Prometheus数据源添加到Grafana,通过导航到仪表板>导入导入Apache Grafana仪表板,使用159表示Grafana仪表板ID:
为其指定一个描述性名称,然后选择之前添加的Prometheus数据源:
单击导入按钮开始使用仪表板,几分钟后,指标应该开始显示,这表示成功了:
相关主题