Prometheus의 추천 - Grafana에서 모니터링 할 사용자 목록을 원합니다 -
10857 단어 node_exportergrafanaprometheus
조사
라고 생각했기 때문에 , 찾아 보면 , node_exporter의 textfile.directory라고 하는 콜렉터로 독자적인 메트릭스를 작성할 수 있는 것 같다.
자신의 지표를 취한다면 Textfile Collector
요컨대 아래와 같은 형식으로 텍스트 파일(확장자 prom)로 작성하면, 마음대로 읽어 줘. 라는 것 같다.
node_scrape_collector_duration_seconds{collector="cpu"} 0.000278377
node_scrape_collector_duration_seconds{collector="diskstats"} 0.000326093
어떤 정보를 원하는지 정리한다.
정보는 사용자 이름과 최종 로그인 정보를 원합니다.
라는 것은 lastlog에서 취할 수 있는 정보를 성형하면 좋을 것 같다.
그런 이유로 최종적으로는 다음과 같은 포맷으로 해본다.
userlist.promnode_user_info{username="",latest="",fromip="",tty=""} 1
스크립팅
위의 참고 기사라면 ruby라든지 사용하고 있지만, 내 스킬 레벨이라면 쉘로 만드는 것이 괜찮습니다. .
환경 : Ubuntu 16.04
userlist.sh#!/bin/bash
OUTPUT=/usr/local/node_exporter/textfile/userlist.prom
# Ubuntu 16.04だと作られたユーザはUID 1000から採番されるのでとりあえず1000-2999までのIDを持つものでgrep
USERLIST=`cat /etc/passwd | grep -e '[1-2][0-9][0-9][0-9]' | awk -F: '{print $1}'`
# OUTPUT 初期化
: > $OUTPUT
# 処理
for i in $USERLIST;do
NAME=$i
PTTY=`lastlog -u $i | grep $i | awk '{print $2}'`
FROMIP=`lastlog -u $i | grep $i | awk '{print $3}'`
LATEST=`lastlog -u $i | grep $i | awk '{print $9" "$5" "$6" "$7" "}'`
cat << EOF >> $OUTPUT
node_user_info{username="${NAME}",latest="${LATEST}",fromip="${FROMIP}",tty="${PTTY}"} 1
EOF
done
이 스크립트를 cron으로 돌려 두면 좋지 않을까요?
구매
수집가 활성화를 잊지 마세요.
/etc/systemd/system/node_exporter.service# BEGIN ANSIBLE MANAGED 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.filesystem.ignored-fs-types="^(autofs|binfmt_misc|cgroup|configfs|debugfs|devpts|devtmpfs|fuse.*|hugetlbfs|mqueue|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|sysfs|tracefs)$" \
--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-colletctor.textfile \
+ --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 \
+ --collector.textfile.directory=/usr/local/node_exporter/textfile/
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
# END ANSIBLE MANAGED BLOCK
나중에 cron
*/15 * * * * /usr/local/node_exporter/userlist.sh
결과
우선, 자신의 서버로부터 curl로 metrics를 취할 수 있는지 확인한다
root# curl http://localhost:9100/metrics | grep user
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 29320 100 29320 0 0 2003k 0 --:--:-- --:--:-- --:--:-- 2045k
node_cpu_guest_seconds_total{cpu="0",mode="user"} 0
node_cpu_seconds_total{cpu="0",mode="user"} 319.13
# HELP node_filesystem_avail_bytes Filesystem space available to non-root users in bytes.
node_textfile_mtime_seconds{file="userlist.prom"} 1.530865161e+09
# HELP node_user_info Metric read from /usr/local/node_exporter/textfile/userlist.prom
# TYPE node_user_info untyped
node_user_info{fromip="XX.XXX.XXX.210",latest="2018 Jul 6 15:11:02 ",tty="pts/2",username="XXX"} 1
node_user_info{fromip="XX.XXX.XXX.210",latest="2018 Jul 6 15:57:09 ",tty="pts/1",username="ubuntu"} 1
node_user_info{fromip="XX.XXX.XXX.210",latest="2018 Jul 6 16:37:33 ",tty="pts/3",username="XXXXX"} 1
잡히네요. 좋아요.
Grafana로 목록화
Variables 설정
Name: 任意
Lable: instance
Hide: Variable
Query: node_user_info
Regex: .*instance="(.*?)".*
다음 테이블 추가query : node_user_info{instance='$instance'}
Instantにチェック
후에는, 좋아하게 열 숨기거나 하면 하면 요로시.
참고 URL
htps : // 기주 b. 이 m / p 어서 s / 그래서 _ x r r # xt
자신의 지표를 취한다면 Textfile Collector
Prometheus 과거 기사
Prometheus의 추천 - 초기 도입 -
Prometheus 추천 - Service Discovery -
Prometheus의 추천 - exporter 도입 node-exporter(apt-get) -
Prometheus의 추천 - exporter 도입 node-exporter(바이너리) -
Prometheus의 추천 - Service Discovery - EndPoint가 'http://:9100/metrics'가 되어 자신이 되어 버리는 건
Reference
이 문제에 관하여(Prometheus의 추천 - Grafana에서 모니터링 할 사용자 목록을 원합니다 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nekoneck/items/75bf58ffd4fc8014d430
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
node_scrape_collector_duration_seconds{collector="cpu"} 0.000278377
node_scrape_collector_duration_seconds{collector="diskstats"} 0.000326093
node_user_info{username="",latest="",fromip="",tty=""} 1
#!/bin/bash
OUTPUT=/usr/local/node_exporter/textfile/userlist.prom
# Ubuntu 16.04だと作られたユーザはUID 1000から採番されるのでとりあえず1000-2999までのIDを持つものでgrep
USERLIST=`cat /etc/passwd | grep -e '[1-2][0-9][0-9][0-9]' | awk -F: '{print $1}'`
# OUTPUT 初期化
: > $OUTPUT
# 処理
for i in $USERLIST;do
NAME=$i
PTTY=`lastlog -u $i | grep $i | awk '{print $2}'`
FROMIP=`lastlog -u $i | grep $i | awk '{print $3}'`
LATEST=`lastlog -u $i | grep $i | awk '{print $9" "$5" "$6" "$7" "}'`
cat << EOF >> $OUTPUT
node_user_info{username="${NAME}",latest="${LATEST}",fromip="${FROMIP}",tty="${PTTY}"} 1
EOF
done
# BEGIN ANSIBLE MANAGED 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.filesystem.ignored-fs-types="^(autofs|binfmt_misc|cgroup|configfs|debugfs|devpts|devtmpfs|fuse.*|hugetlbfs|mqueue|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|sysfs|tracefs)$" \
--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-colletctor.textfile \
+ --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 \
+ --collector.textfile.directory=/usr/local/node_exporter/textfile/
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
# END ANSIBLE MANAGED BLOCK
*/15 * * * * /usr/local/node_exporter/userlist.sh
root# curl http://localhost:9100/metrics | grep user
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 29320 100 29320 0 0 2003k 0 --:--:-- --:--:-- --:--:-- 2045k
node_cpu_guest_seconds_total{cpu="0",mode="user"} 0
node_cpu_seconds_total{cpu="0",mode="user"} 319.13
# HELP node_filesystem_avail_bytes Filesystem space available to non-root users in bytes.
node_textfile_mtime_seconds{file="userlist.prom"} 1.530865161e+09
# HELP node_user_info Metric read from /usr/local/node_exporter/textfile/userlist.prom
# TYPE node_user_info untyped
node_user_info{fromip="XX.XXX.XXX.210",latest="2018 Jul 6 15:11:02 ",tty="pts/2",username="XXX"} 1
node_user_info{fromip="XX.XXX.XXX.210",latest="2018 Jul 6 15:57:09 ",tty="pts/1",username="ubuntu"} 1
node_user_info{fromip="XX.XXX.XXX.210",latest="2018 Jul 6 16:37:33 ",tty="pts/3",username="XXXXX"} 1
Name: 任意
Lable: instance
Hide: Variable
Query: node_user_info
Regex: .*instance="(.*?)".*
Reference
이 문제에 관하여(Prometheus의 추천 - Grafana에서 모니터링 할 사용자 목록을 원합니다 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nekoneck/items/75bf58ffd4fc8014d430텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)