普罗米修斯的建议 – 导入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中获取监视数据的方法多种多样。

广告
将在 10 秒后关闭
bannerAds