普罗米修斯的建议 – 导入exporter节点导出器(使用apt-get)
Prometheus的建议- 服务发现-续篇。
本文旨在帮助不熟悉Prometheus的人在实践中并且进行错误排查时进行学习和研究。因此,信息可能会显得混乱,请谅解。
上次我们通过使用服务发现使得服务器可以自动识别,但由于没有安装出口程序,所以无法获取各种数值。
本来的情况下,在构建时应该安装需要的exporter的服务器是要进行管理的。
考虑到已经构建的服务器也需要进行安装,暂时先尝试使用Ansible进行安装。
虽然说得好,但应该安装哪个出口商呢?
公式文件导出器列表
查找一下,有很多种类呢。。。
好的,让我们整理一下。
虽然不知道能否完成,但我们还是把想要监控的项目都写下来吧。
-
- リソース監視
CPUリソース
メモリリソース
ディスクリソース
ロードアベレージ
プロセス監視
nginx
MySQL
php-fpm
uwsgi
※ というか必要なプロセス
各MW系のステータス
ログ監視
资源相关
据说node_exporter是一个可以收集硬件和操作系统监控项目(收集器)的导出程序。
看了一下prometheus的node_exporter监控项目和配置示例,很容易理解。哦,原来还有收集器的启用/禁用等设置啊。
好像是通过导出程序的启动选项来改变的。
如果提到的项目,就是要有效实施以下内容吧。
除此之外,还要将在障碍时可能会派上用场的东西进行有效处理。
-
- meminfo
-
- stat
-
- loadavg
-
- filesystem
-
- uname
-
- diskstat
- netdev
由于启用太多的收集器可能会增加负荷,所以其他的收集器都是无效的。
所以,从Ansible的角度来看,大概是这样的。(虽然在第一篇文章中已经提到过,node_exporter可以通过apt安装)
收集器的激活和Ansible
# vi node-exporter.yml
- hosts: samplehost
user: sampleuser
sudo: yes
tasks:
- name: apt-get install node-exporter
apt: pkg=prometheus-node-exporter update_cache=yes cache_valid_time=3600
写到这里就只剩下Ubuntu 16.04和systemd的编辑需要用Ansible来写了。正想着这个的时候,在/etc/init.d/目录下发现了启动脚本。原来用apt安装的话会通过init.d来启动啊。那在init.d时怎么写启动脚本呢…要不要看一下命令帮助呢。
Usage of prometheus-node-exporter:
-auth.pass string
Password for basic auth.
-auth.user string
Username for basic auth.
-collector.diskstats.ignored-devices string
Regexp of devices to ignore for diskstats. (default "^(ram|loop|fd|(h|s|v|xv)d[a-z])\\d+$")
-collector.filesystem.ignored-mount-points string
Regexp of mount points to ignore for filesystem collector. (default "^/(sys|proc|dev)($|/)")
-collector.ipvs.procfs string
procfs mountpoint. (default "/proc")
-collector.megacli.command string
Command to run megacli. (default "megacli")
-collector.netdev.ignored-devices string
Regexp of net devices to ignore for netdev collector. (default "^$")
-collector.ntp.server string
NTP server to use for ntp collector.
-collector.textfile.directory string
Directory to read text files with metrics from.
-collectors.enabled string
Comma-separated list of collectors to use. (default "diskstats,filesystem,loadavg,meminfo,stat,textfile,time,netdev,netstat")
-collectors.print
If true, print available collectors and exit.
-debug.memprofile-file string
Write memory profile to this file upon receipt of SIGUSR1.
-log.level value
Only log messages with the given severity or above. Valid levels: [debug, info, warn, error, fatal, panic]. (default info)
-web.listen-address string
Address on which to expose metrics and web interface. (default ":9100")
-web.telemetry-path string
Path under which to expose metrics. (default "/metrics")
如果有基本身份验证,那么就可以在Prometheus中存储这些信息。
暂时可用的收集选项如下吗?
-collectors.enabled=meminfo,stat,loadavg,filesystem,uname,diskstat,netdev
-启用收集器=meminfo,stat,loadavg,filesystem,uname,diskstat,netdev
尝试将代码书写在起动脚本的ARGS部分。
#!/bin/sh
# kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing.
if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then
set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
fi
### BEGIN INIT INFO
# Provides: prometheus-node-exporter
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Prometheus exporter for machine metrics
# Description: Prometheus exporter for machine metrics, written in Go
# with pluggable metric collectors.
### END INIT INFO
# Author: Martin Ferrari <tincho@debian.org>
DESC="Prometheus exporter for machine metrics"
DAEMON=/usr/bin/prometheus-node-exporter
NAME=prometheus-node-exporter
USER=prometheus
PIDFILE=/var/run/prometheus/prometheus-node-exporter.pid
LOGFILE=/var/log/prometheus/prometheus-node-exporter.log
HELPER=/usr/bin/daemon
HELPER_ARGS="--name=$NAME --output=$LOGFILE --pidfile=$PIDFILE --user=$USER"
ARGS="-collectors.enabled=meminfo,stat,loadavg,filesystem,uname,diskstat,netdev"
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
do_start_prepare()
{
mkdir -p `dirname $PIDFILE` || true
chown -R $USER: `dirname $LOGFILE`
chown -R $USER: `dirname $PIDFILE`
}
do_start_cmd()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
$HELPER $HELPER_ARGS --running && return 1
$HELPER $HELPER_ARGS -- $DAEMON $ARGS || return 2
return 0
}
do_stop_cmd()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
$HELPER $HELPER_ARGS --running || return 1
$HELPER $HELPER_ARGS --stop || return 2
# wait for the process to really terminate
for n in 1 2 3 4 5; do
sleep 1
$HELPER $HELPER_ARGS --running || break
done
$HELPER $HELPER_ARGS --running || return 0
return 2
}
# ps -ef | grep prometheus
prometh+ 1826 1 0 Jun27 ? 00:00:00 /usr/bin/daemon --name=prometheus-node-exporter --output=/var/log/prometheus/prometheus-node-exporter.log --pidfile=/var/run/prometheus/prometheus-node-exporter.pid --user=prometheus -- /usr/bin/prometheus-node-exporter -collector.diskstats.ignored-devices="^(ram|loop|fd)\\d+$
prometh+ 1827 1826 0 Jun27 ? 00:01:12 /usr/bin/prometheus-node-exporter -collector.diskstats.ignored-devices="^(ram|loop|fd)\\d+$
root 6240 6126 0 17:51 pts/2 00:00:00 grep --color=auto prometheus
# ps -ef | grep prometheus
matsuza+ 6309 6302 0 18:08 pts/1 00:00:00 ssh -i /home/matsuzaki/.ssh/ap-bastion01-matsuzaki da-dev@ap-prometheus01 -p 2201
prometh+ 6502 1 0 18:17 ? 00:00:00 /usr/bin/daemon --name=prometheus-node-exporter --output=/var/log/prometheus/prometheus-node-exporter.log --pidfile=/var/run/prometheus/prometheus-node-exporter.pid --user=prometheus -- /usr/bin/prometheus-node-exporter -collector.diskstats.ignored-devices="^(ram|loop|fd)\\d+$
prometh+ 6503 6502 0 18:17 ? 00:00:00 /usr/bin/prometheus-node-exporter -collector.diskstats.ignored-devices="^(ram|loop|fd)\\d+$
root 6509 6126 0 18:17 pts/2 00:00:00 grep --color=auto prometheus
嗯,还是一样的。
我觉得即使在 http://localhost:9100/metrics 上查看,其他收集器也已经启用了。
试试在启动脚本中,在启动前打印出ARGS。
# /etc/init.d/prometheus-node-exporter stop
* Stopping Prometheus exporter for machine metrics prometheus-node-exporter [ OK ]r
# /etc/init.d/prometheus-node-exporter start
* Starting Prometheus exporter for machine metrics prometheus-node-exporter
-collector.diskstats.ignored-devices="^(ram|loop|fd)\d+$
[ OK ]
啊。看起来好像要在/etc/default/prometheus-node-exporter里写上就可以了。
将启动选项写入/etc/default/prometheus-node-exporter,位置在init.d中。
# Set the command-line arguments to pass to the server.
ARGS='-collector.diskstats.ignored-devices="^(ram|loop|fd)\\d+$ --collectors.enabled=meminfo,stat,loadavg,filesystem,uname,diskstat,netdev'
# Prometheus-node-exporter supports the following options:
# -auth.pass="": Password for basic auth.
# -auth.user="": Username for basic auth.
# -collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z])\\d+$": Regexp of devices to ignore for diskstats.
# -collector.filesystem.ignored-mount-points="^/(sys|proc|dev)($|/)": Regexp of mount points to ignore for filesystem collector.
# -collector.ipvs.procfs="/proc": procfs mountpoint.
# -collector.megacli.command="megacli": Command to run megacli.
# -collector.ntp.server="": NTP server to use for ntp collector.
# -collector.textfile.directory="": Directory to read text files with metrics from.
# -collectors.enabled="diskstats,filesystem,loadavg,meminfo,stat,textfile,time,netdev,netstat": Comma-separated list of collectors to use.
# -collectors.print=false: If true, print available collectors and exit.
# -debug.memprofile-file="": Write memory profile to this file upon receipt of SIGUSR1.
# -log.level=info: Only log messages with the given severity or above. Valid levels: [debug, info, warn, error, fatal, panic].
# -web.listen-address=":9100": Address on which to expose metrics and web interface.
# -web.telemetry-path="/metrics": Path under which to expose metrics.
好的,再来一次。
# /etc/init.d/prometheus-node-exporter stop
* Stopping Prometheus exporter for machine metrics prometheus-node-exporter [ OK ]
# /etc/init.d/prometheus-node-exporter start
* Starting Prometheus exporter for machine metrics prometheus-node-exporter
-collector.diskstats.ignored-devices="^(ram|loop|fd)\d+$ -collectors.enabled=meminfo,stat,loadavg,filesystem,uname,diskstat,netdev
[ OK ]
# ps -ef | grep prometheus
root 6747 6126 0 18:35 pts/2 00:00:00 grep --color=auto prometheus
尽管一切都没问题,却没开机啊…看看日志吧。
# tail /var/log/prometheus/prometheus-node-exporter.log
time="2018-06-28T18:23:04+09:00" level=info msg=" - loadavg" file="node_exporter.go" line=144
time="2018-06-28T18:23:04+09:00" level=info msg=" - textfile" file="node_exporter.go" line=144
time="2018-06-28T18:23:04+09:00" level=info msg=" - netdev" file="node_exporter.go" line=144
time="2018-06-28T18:23:04+09:00" level=info msg=" - diskstats" file="node_exporter.go" line=144
time="2018-06-28T18:23:04+09:00" level=info msg=" - meminfo" file="node_exporter.go" line=144
time="2018-06-28T18:23:04+09:00" level=info msg=" - stat" file="node_exporter.go" line=144
time="2018-06-28T18:23:04+09:00" level=info msg=" - time" file="node_exporter.go" line=144
time="2018-06-28T18:23:04+09:00" level=info msg=" - netstat" file="node_exporter.go" line=144
time="2018-06-28T18:23:04+09:00" level=info msg="Starting node_exporter v0.0.0.dev at :9100" file="node_exporter.go" line=176
time="2018-06-28T18:35:13+09:00" level=fatal msg="Couldn't load collectors: collector 'uname' not available" file="node_exporter.go" line=139
没有uname的收集器吗?是版本的原因吗?
当我浏览node-exporter的命令帮助时,我发现了一个名为colletors.print的选项,我试着显示一下。
# prometheus-node-exporter -collectors.print
Available collectors:
- bonding
- diskstats
- filesystem
- gmond
- interrupts
- ipvs
- lastlogin
- loadavg
- megacli
- meminfo
- netdev
- netstat
- ntp
- runit
- stat
- tcpstat
- textfile
- time
嗯,没有的。
得出結論
我不再使用apt-get了。
接下来,我们将尝试使用二进制进行安装。
请看下面的资料
在Prometheus中获取监视数据的方法多种多样。