本記事では、Prometheusを知らない人が試しながら調べながらエラー対応も含め記載していってます。
ので情報として煩雑な感じになっているのでご了承ください。
Prometheusのすすめ - exporter導入 node-exporter(apt-get) -の続き
前回はapt-getでnode-exporterを入れたらunameのコレクタが使えなかったので、
今回はバイナリで入れて、起動オプションを変更する所までAnsibleでやってみる。
監視したい項目
前回から抜粋
- リソース監視
- CPUリソース
- メモリリソース
- ディスクリソース
- ロードアベレージ
- プロセス監視
- nginx
- MySQL
- php-fpm
- uwsgi
※ というか必要なプロセス - 各MW系のステータス
- ログ監視
Ansibleのyml作成
参考にするのはここ。何度も載せてるけど。。やりたい事に一番近いからしょうがない。
インフラ・サービス監視ツールの新顔「Prometheus」入門
と、ymlを書く前に起動オプションについて。
前回と同じで行けるかなー。と思ったけどとりあえず確認したかったので手動で解凍してコマンドヘルプを見てみると全然違った。。。
ってかなんだよこれ。。。デフォルト以外の設定をしたい場合は全部、明示的に有効/無効しないといけない・・・?
色々と探し回った結果 ここで議論されているっぽい。。
読み終わったけど、結論は全て個別にって事らしい。
てかBASIC認証も無くなってるし!
起動オプション
Flags:
-h, --help Show context-sensitive help (also try --help-long and --help-man).
--collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\\d+n\\d+p)\\d+$"
Regexp of devices to ignore for diskstats.
--collector.filesystem.ignored-mount-points="^/(dev|proc|sys|var/lib/docker)($|/)"
Regexp of mount points to ignore for filesystem collector.
--collector.filesystem.ignored-fs-types="^(autofs|binfmt_misc|cgroup|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|mqueue|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|sysfs|tracefs)$"
Regexp of filesystem types to ignore for filesystem collector.
--collector.netdev.ignored-devices="^$"
Regexp of net devices to ignore for netdev collector.
--collector.netstat.fields="^(.*_(InErrors|InErrs)|Ip_Forwarding|Ip(6|Ext)_(InOctets|OutOctets)|Icmp6?_(InMsgs|OutMsgs)|TcpExt_(Listen.*|Syncookies.*)|Tcp_(ActiveOpens|PassiveOpens|RetransSegs|CurrEstab)|Udp6?_(InDatagrams|OutDatagrams|NoPorts))$"
Regexp of fields to return for netstat collector.
--collector.ntp.server="127.0.0.1"
NTP server to use for ntp collector
--collector.ntp.protocol-version=4
NTP protocol version
--collector.ntp.server-is-local
Certify that collector.ntp.server address is the same local host as this collector.
--collector.ntp.ip-ttl=1 IP TTL to use while sending NTP query
--collector.ntp.max-distance=3.46608s
Max accumulated distance to the root
--collector.ntp.local-offset-tolerance=1ms
Offset between local clock and local ntpd time to tolerate
--path.procfs="/proc" procfs mountpoint.
--path.sysfs="/sys" sysfs mountpoint.
--collector.qdisc.fixtures=""
test fixtures to use for qdisc collector end-to-end testing
--collector.runit.servicedir="/etc/service"
Path to runit service directory.
--collector.supervisord.url="http://localhost:9001/RPC2"
XML RPC endpoint.
--collector.systemd.unit-whitelist=".+"
Regexp of systemd units to whitelist. Units must both match whitelist and not match blacklist to be included.
--collector.systemd.unit-blacklist=".+\\.scope"
Regexp of systemd units to blacklist. Units must both match whitelist and not match blacklist to be included.
--collector.systemd.private
Establish a private, direct connection to systemd without dbus.
--collector.textfile.directory=""
Directory to read text files with metrics from.
--collector.vmstat.fields="^(oom_kill|pgpg|pswp|pg.*fault).*"
Regexp of fields to return for vmstat collector.
--collector.wifi.fixtures=""
test fixtures to use for wifi collector metrics
--collector.arp Enable the arp collector (default: enabled).
--collector.bcache Enable the bcache collector (default: enabled).
--collector.bonding Enable the bonding collector (default: enabled).
--collector.buddyinfo Enable the buddyinfo collector (default: disabled).
--collector.conntrack Enable the conntrack collector (default: enabled).
--collector.cpu Enable the cpu collector (default: enabled).
--collector.diskstats Enable the diskstats collector (default: enabled).
--collector.drbd Enable the drbd collector (default: disabled).
--collector.edac Enable the edac collector (default: enabled).
--collector.entropy Enable the entropy collector (default: enabled).
--collector.filefd Enable the filefd collector (default: enabled).
--collector.filesystem Enable the filesystem collector (default: enabled).
--collector.hwmon Enable the hwmon collector (default: enabled).
--collector.infiniband Enable the infiniband collector (default: enabled).
--collector.interrupts Enable the interrupts collector (default: disabled).
--collector.ipvs Enable the ipvs collector (default: enabled).
--collector.ksmd Enable the ksmd collector (default: disabled).
--collector.loadavg Enable the loadavg collector (default: enabled).
--collector.logind Enable the logind collector (default: disabled).
--collector.mdadm Enable the mdadm collector (default: enabled).
--collector.meminfo Enable the meminfo collector (default: enabled).
--collector.meminfo_numa Enable the meminfo_numa collector (default: disabled).
--collector.mountstats Enable the mountstats collector (default: disabled).
--collector.netdev Enable the netdev collector (default: enabled).
--collector.netstat Enable the netstat collector (default: enabled).
--collector.nfs Enable the nfs collector (default: enabled).
--collector.nfsd Enable the nfsd collector (default: enabled).
--collector.ntp Enable the ntp collector (default: disabled).
--collector.qdisc Enable the qdisc collector (default: disabled).
--collector.runit Enable the runit collector (default: disabled).
--collector.sockstat Enable the sockstat collector (default: enabled).
--collector.stat Enable the stat collector (default: enabled).
--collector.supervisord Enable the supervisord collector (default: disabled).
--collector.systemd Enable the systemd collector (default: disabled).
--collector.tcpstat Enable the tcpstat collector (default: disabled).
--collector.textfile Enable the textfile collector (default: enabled).
--collector.time Enable the time collector (default: enabled).
--collector.uname Enable the uname collector (default: enabled).
--collector.vmstat Enable the vmstat collector (default: enabled).
--collector.wifi Enable the wifi collector (default: enabled).
--collector.xfs Enable the xfs collector (default: enabled).
--collector.zfs Enable the zfs collector (default: enabled).
--collector.timex Enable the timex collector (default: enabled).
--web.listen-address=":9100"
Address on which to expose metrics and web interface.
--web.telemetry-path="/metrics"
Path under which to expose metrics.
--log.level="info" Only log messages with the given severity or above. Valid levels: [debug, info, warn, error, fatal]
--log.format="logger:stderr"
Set the log target and format. Example: "logger:syslog?appname=bob&local=7" or "logger:stdout?json=true"
--version Show application version
ってことで、yml作成
ちなみにバージョンは最新から取っていますが、上のバージョンがリリースされた時にリンクが切れるのかどうかは分かりません。
---
- hosts: samplehost
user: sampleuser
sudo: yes
tasks:
- name: check exist file
stat:
path: /usr/bin/node_exporter
register: file
- name: wget node-expoter
url: https://github.com/prometheus/node_exporter/releases/download/v0.16.0/node_exporter-0.16.0.linux-amd64.tar.gz
dest: /tmp/node_exporter-0.16.0.linux-amd64.tar.gz
- name: unarchive node-exporter
unarchive:
src: /tmp/node_exporter-0.16.0.linux-amd64.tar.gz
remote_src: yes
dest: /tmp/
- name: copy node-exporter binary
shell: cp /tmp/node_exporter-0.16.0.linux-amd64/node_exporter /usr/bin/node_exporter
when: not file.stat.exists
- name: add system account prometheus
user:
system: yes
name: prometheus
state: present
home: /var/lib/prometheus
shell: /bin/false
comment: Prometheus daemon
- name: create prometheus home directory
file:
state: directory
path: /var/lib/prometheus
mode: 0755
group: prometheus
owner: prometheus
- name: create node_exporter systemd
blockinfile:
path: /etc/systemd/system/node_exporter.service
create: yes
block: |
[Unit]
Description=node_exporter for Prometheus
[Service]
Restart=always
User=prometheus
ExecStart=/usr/bin/node_exporter \
--web.listen-address=0.0.0.0:9100 \
--collector.diskstats.ignored-devices="^(dm-|ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\\d+n\\d+p)\\d+$" \
--collector.filesystem.ignored-mount-points="^/(dev|proc|sys|run|var/lib/(docker|lxcfs|nobody_tmp_secure))($|/)" \
--collector.netdev.ignored-devices="^(lo|docker[0-9]|veth.+)$" \
--no-collector.conntrack \
--collector.cpu \
--collector.diskstats \
--no-collector.filefd \
--collector.filesystem \
--collector.loadavg \
--collector.meminfo \
--collector.netdev \
--collector.netstat \
--no-collector.ntp \
--no-collector.sockstat \
--collector.stat \
--no-collector.textfile \
--no-collector.time \
--collector.uname \
--collector.vmstat \
--no-collector.arp \
--no-collector.bcache \
--no-collector.bonding \
--no-collector.buddyinfo \
--no-collector.drbd \
--no-collector.edac \
--no-collector.entropy \
--no-collector.hwmon \
--no-collector.infiniband \
--no-collector.interrupts \
--no-collector.ipvs \
--no-collector.ksmd \
--no-collector.logind \
--no-collector.mdadm \
--no-collector.meminfo_numa \
--no-collector.mountstats \
--no-collector.nfs \
--no-collector.nfsd \
--no-collector.qdisc \
--no-collector.runit \
--no-collector.supervisord \
--no-collector.systemd \
--no-collector.tcpstat \
--no-collector.timex \
--no-collector.wifi \
--no-collector.xfs \
--no-collector.zfs
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
- name: add node_exporter systemd
systemd:
name: node_exporter.service
enabled: yes
state: started
とりあえずこれで大丈夫かな?