• Stars
    star
    120
  • Rank 295,983 (Top 6 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created over 11 years ago
  • Updated over 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Metrics collector written in golang

metrix

Build Status

Metrics collector written in golang

Requirements

You need to have go 1.1 and some build tools installed. This can be done in ubuntu like this (make sure universe is enabled):

apt-get install -y bzr git-core build-essential
cd /opt
curl -OL https://go.googlecode.com/files/go1.1.1.linux-amd64.tar.gz
tar xvfz go1.1.1.linux-amd64.tar.gz
export GOROOT=/opt/go
export GOPATH=/go

Installation

Building of the binary needs to only be done once. You can just copy it to any linux system and run it without any extra dependencies.

git clone [email protected]:dynport/metrix.git /tmp/metrix
cd /tmp/metrix
make install_dependencies
make
make install    

Examples

# Post load and memory metrics to opentsdb
metrix --memory --loadavg --opentsdb=<opentsdbhost>:<opentsdbport>

# Post memory and loadavg metrix to opentsdb (every 60s), log output to syslog
# 
# /etc/cron.d/metrix
* * * * * root /usr/local/bin/metrix --memory --loadavg --opentsdb=<opentsdbhost>:<opentsdbport> 2>&1 | logger -t metrix

Used Keys

You can get a list of used keys for a specific metric by adding the --keys option. All keys should directly match to what can be found in man proc or to the keys used in the stats output (examples: riak, redis, elasticsearch, etc.)

Loadavg

$ metrix --loadavg --keys
load.Load1m
load.Load5m
load.Load15m

Cpu

The Tags cpu_id=1 (for cpu specific counters) or total=total (for the global counters) are added for OpenTSDB

$ metrix --cpu --keys
cpu.Ctxt
cpu.Btime
cpu.Processes
cpu.ProcsRunning
cpu.ProcsBlocked
cpu.User
cpu.Nice
cpu.System
cpu.Idle
cpu.IOWait
cpu.IRC
cpu.SoftIRQ

Disk Usage (fetched with df -k and df -i)

All metrics are tagged with file_system and mounted_on when writing to OpenTSDB.

$ metrix --df --keys
df.space.Total
df.space.Used
df.space.Available
df.space.Use
df.inode.Total
df.inode.Used
df.inode.Available
df.inode.Use

Network counters (fetched with netstat -s)

$ metrix --net --keys
net.ip.TotalPacketsReceived
net.ip.Forwarded
net.ip.IncomingPacketsDiscarded
net.ip.IncomingPacketsDelivered
net.ip.RequestsSentOut
net.tcp.ActiveConnectionsOpenings
net.tcp.PassiveConnectionsOpenings
net.tcp.FailedConnectionAttempts
net.tcp.ConnectionResetsReceived
net.tcp.ConnectionsEstablished
net.tcp.SegmentsReceived
net.tcp.SegmentsSendOut
net.tcp.SegmentsTransmitted
net.tcp.BadSegmentsReceived
net.tcp.ResetsSent
net.udp.PacketsReceived
net.udp.PacketsToUnknownPortRecived
net.udp.PacketReceiveErrors
net.udp.PacketsSent
net.ip.InOctets
net.ip.OutOctets

Open Files (fetched with lsof)

 $ ./bin/metrix --files --keys
 files.Open

Process

All metrics are tagged with pid, parent pid (ppid), name and raw comm value of the process when writing to OpenTSDB.

$ metrix --processes --keys
processes.Pid
processes.Ppid
processes.Pgrp
processes.Session
processes.TtyNr
processes.Tpgid
processes.Flags
processes.Minflt
processes.Cminflt
processes.Majflt
processes.Cmajflt
processes.Utime
processes.Stime
processes.Cutime
processes.Sctime
processes.Priority
processes.Nice
processes.NumThreads
processes.Itrealvalue
processes.Starttime
processes.Vsize
processes.RSS
processes.RSSlim
processes.Startcode
processes.Endcode
processes.Startstac
processes.GuestTime
processes.CguestTime

Disk

All metrics are tagged with name of the disk when writing to OpenTSDB.

$ metrix --disk --keys
disk.ReadsCompleted
disk.ReadsMerged
disk.SectorsRead
disk.MillisecondsRead
disk.WritesCompleted
disk.WritesMerged
disk.SectorsWritten
disk.MillisecondsWritten
disk.IosInProgress
disk.MillisecondsIO
disk.WeightedMillisecondsIO

Redis

All redis metrics are tagged with the pid and the port on which redis is running. For the redis.db db id is tagged with db.

$ metrix --redis --keys
redis.UptimeInSeconds
redis.memory.UsedMemory
redis.memory.UsedMemoryRSS
redis.memory.UsedMemoryPeak
redis.memory.UsedMemoryLua
redis.clients.ConnectedClients
redis.clients.ClientLongestOutputList
redis.clients.ClientBiggestInputBuf
redis.clients.BlockedClients
redis.stats.TotalConnectionsReceived
redis.stats.TotalCommandsProcessed
redis.stats.InstantaneousOpsPerSec
redis.stats.RejectedConnections
redis.stats.ExpiredKeys
redis.stats.EvictedKeys
redis.stats.KeyspaceHits
redis.stats.KeyspaceMisses
redis.stats.PubsubChannels
redis.stats.PubsubPatterns
redis.stats.LatestForkUsec
redis.replication.ConnectedSlaves
redis.db.Keys
redis.db.Expires

Riak

$ metrix --redis --keys
riak.VNodeGets
riak.VNodeGets
riak.VNodeGetsTotal
riak.VNodePuts
riak.VNodePutsTotal
riak.VNodeIndexReads
riak.VNodeIndexReadsTotal
riak.VNodeIndexWrites
riak.VNodeIndexWritesTotal
riak.VNodeIndexWritesPostings
riak.VNodeIndexWritesPostings_total
riak.VNodeIndexDeletes
riak.VNodeIndexDeletes_total
riak.VNodeIndexDeletes_postings
riak.VNodeIndexDeletes_postings_total
riak.NodeGets
riak.NodeGetsTotal
riak.NodeGet_fsm_siblings_mean
riak.NodegetFsmSiblingsMedian
riak.NodegetFsmSiblings95
riak.NodegetFsmSiblings99
riak.NodegetFsmSiblings100
riak.NodegetFsmObjsizeMean
riak.NodegetFsmObjsizeMedian
riak.NodegetFsmObjsize95
riak.NodegetFsmObjsize99
riak.NodegetFsmObjsize100
riak.NodegetFsmTimeMean
riak.NodegetFsmTimeMedian
riak.NodegetFsmTime95
riak.NodegetFsmTime99
riak.NodegetFsmTime100
riak.NodePuts
riak.NodePutsTotal
riak.NodePutFsmTimeMean
riak.NodePutFsmTimeMedian
riak.Node_put_fsm_time_95
riak.Node_put_fsm_time_99
riak.Node_put_fsm_time_100
riak.ReadRepairs
riak.ReadRepairsTotal
riak.CoordRedirsTotal
riak.ExecutingMappers
riak.PrecommitFail
riak.PostcommitFail
riak.PbcActive
riak.PbcConnects
riak.PbcConnectsTotal
riak.NodeGetFsmActive
riak.NodeGetFsmActive60s
riak.NodeGetFsmInRate
riak.NodeGetFsmOutRate
riak.NodeGetFsmRejected
riak.NodeGetFsmRejected60s
riak.NodeGetFsmRejectedTotal
riak.NodePutFsmActive
riak.NodePutFsmActive60s
riak.NodePutFsmInRate
riak.NodePutFsmOutRate
riak.NodePutFsmRejected
riak.NodePutFsmRejected60s
riak.NodePutFsmRejectedTotal
riak.ReadRepairsPrimaryOutofdateOne
riak.ReadRepairsPrimaryOutofdateCount
riak.ReadRepairsPrimaryNotfoundOne
riak.ReadRepairsPrimaryNotfoundCount
riak.ReadRepairsFallbackOutofdateOne
riak.ReadRepairsFallbackOutofdateCount
riak.ReadRepairsFallbackNotfoundOne
riak.ReadRepairsFallbackNotfoundCount
riak.PipelineActive
riak.PipelineCreateCount
riak.PipelineCreateOne
riak.PipelineCreateErrorCount
riak.PipelineCreateErrorOne
riak.CpuNprocs
riak.CpuAvg1
riak.CpuAvg5
riak.CpuAvg15
riak.MemTotal
riak.MemAllocated
riak.SysGlobalHeapsSize
riak.SysProcessCount
riak.SysThreadPoolSize
riak.SysWordsize
riak.RingNumPartitions
riak.RingCreationSize
riak.MemoryTotal
riak.MemoryProcesses
riak.MemoryProcessesUsed
riak.MemorySystem
riak.MemoryAtom
riak.MemoryAtomUsed
riak.MemoryBinary
riak.MemoryCode
riak.MemoryEts
riak.RiakCoreStatTs
riak.IgnoredGossipTotal
riak.RingsReconciledTotal
riak.RingsReconciled
riak.GossipReceived
riak.RejectedHandoffs
riak.HandoffTimeouts
riak.DroppedVnodeRequestsTotal
riak.ConvergeDelayMin
riak.ConvergeDelayMax
riak.ConvergeDelayMean
riak.ConvergeDelayLast
riak.RebalanceDelayMin
riak.RebalanceDelayMax
riak.RebalanceDelayMean
riak.RebalanceDelayLast
riak.RiakKvVnodesRunning
riak.RiakKvVnodeqMin
riak.RiakKvVnodeqMedian
riak.RiakKvVnodeqMean
riak.RiakKvVnodeqMax
riak.RiakKvVnodeqTotal
riak.RiakPipeVnodesRunning
riak.RiakPipeVnodeqMin
riak.RiakPipeVnodeqMedian
riak.RiakPipeVnodeqMean
riak.RiakPipeVnodeqMax
riak.RiakPipeVnodeqTotal
riak.ConnectedNodesCount
riak.RingMembersCount

Nginx

$ metrics --nginx --keys
nginx.ActiveConnections
nginx.Accepts
nginx.Handled
nginx.Requests
nginx.Reading
nginx.Writing
nginx.Waiting

ElasticSearch

All indexes starting with elasticsearch.indices are tagged with the index_name of the specific index.

$ metrix --elasticsearch --keys
elasticsearch.shards.Total
elasticsearch.shards.Successful
elasticsearch.shards.Failed
elasticsearch.indices.index.SizeInBytes
elasticsearch.indices.index.PrimarySizeInBytes
elasticsearch.indices.translog.Operations
elasticsearch.indices.docs.NumDocs
elasticsearch.indices.docs.MaxDoc
elasticsearch.indices.docs.DeletedDocs
elasticsearch.indices.merges.Current
elasticsearch.indices.merges.CurrentDocs
elasticsearch.indices.merges.CurrentSizeInBytes
elasticsearch.indices.merges.Total
elasticsearch.indices.merges.TotalTimeInMillis
elasticsearch.indices.merges.TotalDocs
elasticsearch.indices.merges.TotalSizeInBytes
elasticsearch.indices.refresh.Total
elasticsearch.indices.refresh.TotalTimeInMillis
elasticsearch.indices.flush.Total
elasticsearch.indices.flush.TotalTimeInMillis

PostgreSQL

Used tags for some metrics are table, index, database, pid, state and waiting.

$ metrix --postgres=127.0.0.1 --keys
postgres.StatActivity
postgres.tables.SeqScan
postgres.tables.SeqTupRead
postgres.tables.IdxScan
postgres.tables.IdxTupFetch
postgres.tables.NTupIns
postgres.tables.NTupUpd
postgres.tables.NTupDel
postgres.tables.NTupHotUpd
postgres.tables.NLiveTup
postgres.tables.NDeadTup
postgres.tables.VacuumCount
postgres.tables.AutoVacuumAcount
postgres.tables.AnalyzeCount
postgres.tables.AutoAnalyzeCount
postgres.databases.NumBackends
postgres.databases.XactCommit
postgres.databases.XactRollback
postgres.databases.BlksRead
postgres.databases.BlksHit
postgres.databases.TupReturned
postgres.databases.TupFetched
postgres.databases.TupInserted
postgres.databases.TupUpdated
postgres.databases.TupDeleted
postgres.databases.Conflicts
postgres.databases.TempFiles
postgres.databases.TempBytes
postgres.databases.Deadlocks
postgres.databases.BlkReadTime
postgres.databases.BlkWriteTime
postgres.indexes.IdxScan
postgres.indexes.IdxTupRead
postgres.indexes.IdxTupFetch

PgBouncer

Used tags are database, state, address, port, local_address, local_port and type.

$ ./bin/metrix --pgbouncer=127.0.0.1:6432 --keys
pgbouncer.connections.Total
pgbouncer.memory.Free
pgbouncer.memory.MemTotal
pgbouncer.memory.Size
pgbouncer.memory.Used
pgbouncer.pools.ClientsActive
pgbouncer.pools.ClientsWaiting
pgbouncer.pools.MaxWait
pgbouncer.pools.ServersActive
pgbouncer.pools.ServersIdle
pgbouncer.pools.ServersLogin
pgbouncer.pools.ServersTested
pgbouncer.pools.ServersUsed
pgbouncer.sockets.PktAvail
pgbouncer.sockets.PktPos
pgbouncer.sockets.PktRemain
pgbouncer.sockets.RecvPos
pgbouncer.sockets.SendAvail
pgbouncer.sockets.SendPos
pgbouncer.sockets.SendRemain
pgbouncer.stats.AvgQuery
pgbouncer.stats.AvgRecv
pgbouncer.stats.AvgReq
pgbouncer.stats.AvgSent
pgbouncer.stats.TotalQueryTime
pgbouncer.stats.TotalReceived
pgbouncer.stats.TotalRequests
pgbouncer.stats.TotalSent

Help

USAGE: ./bin/metrix
  --help           	Print this usage page                                               
  --keys           	Only list all known keys    

  --influxdb        Report metrics to InfluxDB host.                                    
                    EXAMPLE: user:[email protected]:8086/database                  

                                    
  --opentsdb       	Report metrics to OpenTSDB host.                                    
                    EXAMPLE: opentsdb.host:4242                                         

  --graphite       	Report metrics to Graphite host.                                    
                    EXAMPLE: graphite.host:2003                                         

  --hostname       	Hostname to be used for tagging. If blank the local hostname is used
  --loadavg        	Collect loadvg metrics                                              
  --memory         	Collect memory metrics                                              
  --cpu            	Collect cpu metrics                                                 
  --disk           	Collect disk usage metrics                                          
  --processes      	Collect metrics for processes                                       
  --net            	Collect network metrics                                             
  --df             	Collect disk free space metrics                                     
  --riak           	Collect riak metrics                                                
                    DEFAULT: http://127.0.0.1:8098/stats                                

  --elasticsearch  	Collect ElasticSearch metrics                                       
                    DEFAULT: http://127.0.0.1:9200/_status                              

  --redis          	Collect redis metrics                                               
                    DEFAULT: 127.0.0.1:6379                                             

  --postgres       	Collect postgres metrics.                                           
                    EXAMPLE: psql://user:pwd@host/db                                    

  --pgbouncer      	Collect pgbouncer metrics                                           
                    DEFAULT: 127.0.0.1:6432                                             

  --nginx          	Collect nginx metrics                                               
                    DEFAULT: http://127.0.0.1:8080  

  --suricata        dump Suricata's performance counters                                
                    DEFAULT: /usr/local/var/run/suricata/suricata-command.socket