Collectd
Sisukord
Sissejuhatus
Collectd on klient-server töövahend erinevate mõõtemeetrikute korjamiseks ja salvestamiseks. Tegemist on ühe süsteemis töötava deemoniga, mille funktsionaalsus ehk kas tegemist serveri, klienti, proxyga saavutatakse erinevate pluginate vahendusel. Samamoodi on kõik info mida süsteemist korjatakse seadistatav läbi erinevate pluginate.
Mõned lihtsad asjad mida annab collect abil koguda on nt cpu, mälu ja võrgu kohta käiv info.
Collectd deemon ise vaid kogub ja salvestab infot ning graafikute loomiseks on vaja eraldi rakendust. Collectd töövoogu iseloomustab järgnev pilt.
Paigaldamine
Debianis
# apt-get install collectd
Arch linuxis
# pacman -Sy collectd
Serveri puhul tuleb paigaldada veel rrdtool
Lihtne klienti seadistus
LoadPlugin "cpu" # protsessori statistika
LoadPlugin "memory" # mälu
LoadPlugin "interface" # võrguseadmed
# välistame teatud võrguseadmete graafikute joonistamise, vastupidise saavutamiseks IgnoreSelected false
<Plugin interface>
Interface lo
Interface sit0
IgnoreSelected true
</Plugin>
LoadPlugin "network"
# saadame kõik info enda collectd serverile, servereid võib olla seejuures mitu
<Plugin "network">
Server "collectd0.example.com"
</Plugin>
Lihtne serveri seadistusfail
LoadPlugin "network"
<Plugin "network">
Listen "ip_aadress"
</Plugin>
LoadPlugin "rrdtool"
<Plugin "rrdtool">
DataDir "/var/lib/collectd/rrd"
</Plugin>
Proxy
LoadPlugin "network" <Plugin "network"> Listen "collectgw.extern.example.com" Server "collectd1.intern.example.com" Forward true </Plugin>
Collectd web
Collectd jaoks on arendatud terve hulk veebiliideseid, enamusel neist oma head ja vead. Üsna põhjaliku nimekirja leiab https://collectd.org/wiki/index.php/List_of_front-ends
Keerukamad kasutusjuhud
Mõned kasutusnäited
Näiteks selleks, et cpudest ei joonistataks mitte ainult eraldi graafikuid vaid ka üks nende kõigi kogusumma kohta
<Plugin "cpu"> ReportByCpu false </Plugin>
Kindlad protsessid
LoadPlugin processes <Plugin processes> Process uhttpd Process dnsmasq Process dropbear </Plugin>
Postfixi järjekord omatehtud skriptiga
Skripti käivitamine, antud näites loeb skript kokku faile postfixi järjekorra kaustadest
LoadPlugin exec <Plugin exec> Exec "postfix:postfix" "/etc/collectd.d/collectd-postfix.sh" </Plugin>
collectd-postfix.sh
#!/bin/bash
INTERVAL=60
POSTFIX_QDIR=/var/spool/postfix
while :; do
time=$(date +%s)
for q in incoming active deferred corrupt hold; do
count=$(find $POSTFIX_QDIR/$q -type f -print | wc -l)
eval "$q=$count"
done
echo "PUTVAL \"$HOSTNAME/postfix/postfix_queue\" interval=$INTERVAL $time:$incoming:$active:$deferred:$corrupt:$hold"
sleep $INTERVAL
done
Isetehtud skriptil tuleks täiendada ka tüüpide andmebaasi
echo "postfix_queue incoming:GAUGE:0:U, active:GAUGE:0:U, deferred:GAUGE:0:U, corrupt:GAUGE:0:U, hold:GAUGE:0:U" >> /etc/collectd.d/types.db
Postgresqli jälgimine
Postgresile saab teha lihtsa päringu, millepeale siis graafik joonistatakse. Seda näiteks selliselt:
LoadPlugin postgresql <Plugin postgresql> # Loome query nimega dbsize <Query dbsize> Statement "SELECT t1.datname AS db_name, pg_size_pretty(pg_database_size(t1.datname)) as db_size from pg_database t1 order by pg_database_size(t1.datname) desc;" Param db_size <Result> Type dbsize InstancePrefix "db_name" ValuesFrom "db_size" </Result> </Query> # Database postgres andmed # ja tema suunas tehtavad queryd <Database postgres> Host "127.0.0.1" Port "5432" User "postgres" Password "" Query dbsize </Database> # jälgime spetsiifilist baasi <Database zoobaas> Host "127.0.0.1" Port "5432" User "postgres" Password "" Query backends Query transactions Query queries Query query_plans Query table_states Query disk_io Query disk_usage </Database> </Plugin>
Ja lihtsalt monitooringu jaoks piisab ühest pluginast ja paarist regexpist
LoadPlugin processes <Plugin "processes"> ProcessMatch pg_writer "postgres:.writer.process" ProcessMatch pg_wal_writer "postgres:.wal.writer.process" ProcessMatch pg_autovacuum "postgres:.*autovacuum" ProcessMatch pg_stats_collector "postgres:.stats.collector.process" # database connections by ’user’ ProcessMatch pg_user_kasutaja "postgres:.kasutaja" # database connections to database ’andmed’ ProcessMatch pg_db_andmed "postgres:.[A-Za-z0-9]+.andmed" </Plugin>
Temperatuurianduri andmed failist
Kasutusel on Beaglebone Black, mille GPIO külge on joodetud kaks temperatuuriandurit
Kaks andurit, kumbki annab eraldi failist väljundit
10-00080013237c 10-0008001327a7
Näiteks
# cat /sys/devices/w1_bus_master1/10-0008001327a7/w1_slave 24 00 4b 46 ff ff 09 10 53 : crc=53 YES 24 00 4b 46 ff ff 09 10 53 t=18187
seal t=17375 on temperatuur millikraadides.
Järgnev konfilõik loeb curliga failist info, korjab sellest regexpi abil millikraadides temperatuuri, ja viimaks teisendab millikraadid normaalseteks ühikuteks
# laadime vajalikud pluginad
LoadPlugin curl
LoadPlugin match_regex
LoadPlugin target_scale
<Plugin curl>
<Page "Cont1_T">
URL "file:///sys/devices/w1_bus_master1/10-0008001327a7/w1_slave"
<Match>
Regex "t=(-?[0-9]+)"
DSType "GaugeLast"
Type "temperature"
Instance "Andur 1"
</Match>
</Page>
<Page "Cont2_T">
URL "file:///sys/devices/w1_bus_master1/10-00080013237c/w1_slave"
<Match>
Regex "t=(-?[0-9]+)"
DSType "GaugeLast"
Type "temperature"
Instance "Andur 2"
</Match>
</Page>
</Plugin>
<Chain "PreCache">
<Rule "m_to_c">
<Match "regex">
Plugin "^curl$"
Type "^temperature$"
</Match>
<Target "scale">
Factor 0.001
</Target>
</Rule>
</Chain>
UPSi andmete lugemine
Võrgu-upside puhul oleks tarvis paigaldada ja seadistada nut tarkvara
/etc/nut/ups.conf
[juurups] driver = snmp-ups port = 10.1.1.7 community = public snmp_version = v2c mibs = ietf pollfreq = 60
collectd konfiguratsioon
<Plugin nut> UPS "juurups@localhost:3493" </Plugin>
Võrgulüliti (switchi) graafikud
Collectd võimaldab joonistada liiklusgraafikuid ka snmp toega switchide portidest
<Plugin snmp>
<Data "ifmib_if_octets64">
Type "if_octets"
Table true
Instance "IF-MIB::ifName"
Values "IF-MIB::ifHCInOctets" "IF-MIB::ifHCOutOctets"
</Data>
<Data "ifmib_if_packets64">
Type "if_packets"
Table true
Instance "IF-MIB::ifName"
Values "IF-MIB::ifHCInUcastPkts" "IF-MIB::ifHCOutUcastPkts"
</Data>
<Data "ifmib_if_broadpackets64">
Type "if_broadpackets"
Table true
Instance "IF-MIB::ifName"
Values "IF-MIB::ifHCInBroadcastPkts" "ifHCOutBroadcastPkts"
</Data>
<Data "ifmib_if_multipackets64">
Type "if_multipackets"
Table true
Instance "IF-MIB::ifName"
Values "ifHCInMulticastPkts" "ifHCOutMulticastPkts"
</Data>
<Data "ifmib_if_errors">
Type "if_errors"
Table true
Instance "IF-MIB::ifName"
Values "IF-MIB::ifInErrors" "IF-MIB::ifOutErrors"
</Data>
<Host "serverite-sw">
Address "10.100.0.33"
Version 2
Community "public"
Collect "ifmib_if_octets64" "ifmib_if_packets64"
</Host>
<Host "siseliiklus-sw">
Address "10.100.0.34"
Version 2
Community "public"
Collect "ifmib_if_octets64" "ifmib_if_packets64"
</Host>
</Plugin>
Tulemus on umbkaudu järgnev
Loomulikult on vaja täiendavalt mingit veebilahendust mis oskab rrd faile piltidena veebis näidata