Table of Contents

collectd

debug log

#source : http://emacstragic.net/collectd-causing-rrd-illegal-attempt-to-update-using-time-errors/
<Plugin df>
        FSType "rootfs"
        IgnoreSelected true
</Plugin>

mysql

apt-get install libdbd-mysql
LoadPlugin dbi

        # recup de la taille de la table inventoryitems
        
                Statement "SELECT table_name as c_key,round(sum(data_length+index_length)/1024/1024,2) as c_value FROM information_schema.tables WHERE table_schema = 'prod_grid' AND table_name = 'inventoryitems';"
                
                        Type "gauge"
                        InstancePrefix "inventory_size"
                        InstancesFrom "c_key"
                        ValuesFrom "c_value"
                
        # recup du nombre de users
        
                Statement "SELECT count( PrincipalID ) as c_value FROM `UserAccounts;"
                
                        Type "gauge"
                        InstancePrefix "users_count"
                        ValuesFrom "c_value"
                
        # recup de la quantite de users online
        
                Statement "SELECT COUNT(UserID) AS c_value FROM Presence WHERE RegionID'00000000-0000-0000-0000-000000000000';"
                
                        Type "gauge"
                        InstancePrefix "online_users_count"
                        ValuesFrom "c_value"
                
        # recup de la quantite de regions
        
                Statement "SELECT COUNT(uuid) AS c_value FROM regions;"
                
                        Type "gauge"
                        InstancePrefix "regions_count"
                        ValuesFrom "c_value"
                
        # config de la base
        
                Driver "mysql"
                DriverOption "host" "localhost"
                DriverOption "mysql_unix_socket" "/var/run/mysqld/mysqld.sock"
                DriverOption "username" "localreader"
                DriverOption "password" "abcdef"
                DriverOption "dbname" "mybase"
                SelectDB "mybase"
                Query "inventory_size"
                Query "users_count"
                Query "online_users_count"
                Query "regions_count"

apache stats

Install apache stats

a2enmod status

create stats config file

edit /etc/apache2/conf.d/stats

ExtendedStatus on
<Location /server-status>
  SetHandler server-status

  Order Deny,Allow
  Deny from all
  Allow from .example.com
  Allow from localhost
</Location>

Install collectd

apt-get install collectd

edit /etc/collectd/collectd.conf

# Config file for collectd(1).
#
# Some plugins need additional configuration and are disabled by default.
# Please read collectd.conf(5) for details.
#
# You should also read /usr/share/doc/collectd-core/README.Debian.plugins
# before enabling any more plugins.

#Hostname "localhost"
FQDNLookup true
#BaseDir "/var/lib/collectd"
#PluginDir "/usr/lib/collectd"
#TypesDB "/usr/share/collectd/types.db" "/etc/collectd/my_types.db"
#Interval 10
#ReadThreads 5

LoadPlugin logfile
#LoadPlugin syslog

#<Plugin syslog>
#	LogLevel info
#</Plugin>

<Plugin "logfile">
  LogLevel "info"
  File "/var/log/collectd.log"
  #File STDOUT
  Timestamp true
</Plugin>

LoadPlugin apache
#LoadPlugin apcups
#LoadPlugin ascent
#LoadPlugin battery
#LoadPlugin bind
#LoadPlugin conntrack
LoadPlugin cpu
#LoadPlugin cpufreq
#LoadPlugin csv
#LoadPlugin curl
#LoadPlugin curl_json
#LoadPlugin dbi
LoadPlugin df
LoadPlugin disk
#LoadPlugin dns
#LoadPlugin email
#LoadPlugin entropy
#LoadPlugin exec
#LoadPlugin filecount
#LoadPlugin fscache
#LoadPlugin gmond
#LoadPlugin hddtemp
LoadPlugin interface
#LoadPlugin ipmi
#LoadPlugin iptables
#LoadPlugin ipvs
#LoadPlugin irq
#LoadPlugin java
#LoadPlugin libvirt
LoadPlugin load
#LoadPlugin madwifi
#LoadPlugin mbmon
#LoadPlugin memcachec
#LoadPlugin memcached
LoadPlugin memory
#LoadPlugin multimeter
#LoadPlugin mysql
#LoadPlugin netlink
#LoadPlugin network
#LoadPlugin nfs
#LoadPlugin nginx
#LoadPlugin notify_desktop
#LoadPlugin notify_email
#LoadPlugin ntpd
#LoadPlugin nut
#LoadPlugin olsrd
#LoadPlugin openvpn
#LoadPlugin perl
#LoadPlugin ping
#LoadPlugin postgresql
#LoadPlugin powerdns
LoadPlugin processes
#LoadPlugin protocols
LoadPlugin rrdtool
#LoadPlugin sensors
#LoadPlugin serial
#LoadPlugin snmp
LoadPlugin swap
#LoadPlugin table
#LoadPlugin tail
#LoadPlugin tcpconns
#LoadPlugin teamspeak2
#LoadPlugin ted
#LoadPlugin thermal
#LoadPlugin unixsock
#LoadPlugin uptime
#LoadPlugin users
#LoadPlugin uuid
#LoadPlugin vmem
#LoadPlugin vserver
#LoadPlugin wireless
#LoadPlugin write_http

<Plugin apache>
#	<Instance "foo">
#		URL "http://localhost/server-status?auto"
#		User "www-user"
#		Password "secret"
#		VerifyPeer false
#		VerifyHost false
#		CACert "/etc/ssl/ca.crt"
#		Server "apache"
#	</Instance>
#
	<Instance "myserver">
		URL "http://localhost/server-status?auto"
		Host "mymachine"
		Server "apache"
	</Instance>
</Plugin>

#<Plugin apcups>
#	Host "localhost"
#	Port "3551"
#</Plugin>

#<Plugin ascent>
#	URL "http://localhost/ascent/status/"
#	User "www-user"
#	Password "secret"
#	VerifyPeer false
#	VerifyHost false
#	CACert "/etc/ssl/ca.crt"
#</Plugin>

#<Plugin "bind">
#	URL "http://localhost:8053/"
#
#	OpCodes true
#	QTypes true
#	ServerStats true
#	ZoneMaintStats true
#	ResolverStats false
#	MemoryStats true
#
#	<View "_default">
#		QTypes true
#		ResolverStats true
#		CacheRRSets true
#
#		Zone "127.in-addr.arpa/IN"
#	</View>
#</Plugin>

#<Plugin csv>
#	DataDir "/var/lib/collectd/csv"
#	StoreRates false
#</Plugin>

#<Plugin curl>
#	<Page "stock_quotes">
#		URL "http://finance.google.com/finance?q=NYSE%3AAMD"
#		User "foo"
#		Password "bar"
#		VerifyPeer false
#		VerifyHost false
#		CACert "/etc/ssl/ca.crt"
#		<Match>
#			Regex "<span +class=\"pr\"[^>]*> *([0-9]*\\.[0-9]+) *</span>"
#			DSType "GaugeAverage"
#			Type "stock_value"
#			Instance "AMD"
#		</Match>
#	</Page>
#</Plugin>

#<Plugin curl_json>
## See: http://wiki.apache.org/couchdb/Runtime_Statistics
#  <URL "http://localhost:5984/_stats">
#    Instance "httpd"
#    <Key "httpd/requests/count">
#      Type "http_requests"
#    </Key>
#
#    <Key "httpd_request_methods/*/count">
#      Type "http_request_methods"
#    </Key>
#
#    <Key "httpd_status_codes/*/count">
#      Type "http_response_codes"
#    </Key>
#  </URL>
## Database status metrics:
#  <URL "http://localhost:5984/_all_dbs">
#    Instance "dbs"
#    <Key "*/doc_count">
#      Type "gauge"
#    </Key>
#    <Key "*/doc_del_count">
#      Type "counter"
#    </Key>
#    <Key "*/disk_size">
#      Type "bytes"
#    </Key>
#  </URL>
#</Plugin>

#<Plugin dbi>
#	<Query "num_of_customers">
#		Statement "SELECT 'customers' AS c_key, COUNT(*) AS c_value \
#				FROM customers_tbl"
#		MinVersion 40102
#		MaxVersion 50042
#		<Result>
#			Type "gauge"
#			InstancePrefix "customer"
#			InstancesFrom "c_key"
#			ValuesFrom "c_value"
#		</Result>
#	</Query>
#
#	<Database "customers_db">
#		Driver "mysql"
#		DriverOption "host" "localhost"
#		DriverOption "username" "collectd"
#		DriverOption "password" "secret"
#		DriverOption "dbname" "custdb0"
#		SelectDB "custdb0"
#		Query "num_of_customers"
#		Query "..."
#	</Database>
#</Plugin>

#<Plugin df>
#	Device "/dev/sda1"
#	Device "192.168.0.2:/mnt/nfs"
#	MountPoint "/home"
#	FSType "ext3"
#	IgnoreSelected false
#	ReportByDevice false
#</Plugin>

#<Plugin disk>
#	Disk "hda"
#	Disk "/sda[23]/"
#	IgnoreSelected false
#</Plugin>

#<Plugin dns>
#	Interface "eth0"
#	IgnoreSource "192.168.0.1"
#	SelectNumericQueryTypes false
#</Plugin>

#<Plugin email>
#	SocketFile "/var/run/collectd-email"
#	SocketGroup "collectd"
#	SocketPerms "0770"
#	MaxConns 5
#</Plugin>

#<Plugin exec>
#	Exec user "/path/to/exec"
#	Exec "user:group" "/path/to/exec"
#	NotificationExec user "/path/to/exec"
#</Plugin>

#<Plugin filecount>
#	<Directory "/path/to/dir">
#		Instance "foodir"
#		Name "*.conf"
#		MTime "-5m"
#		Size "+10k"
#		Recursive true
#	</Directory>
#</Plugin>

#<Plugin gmond>
#	MCReceiveFrom "239.2.11.71" "8649"
#
#	<Metric "swap_total">
#		Type "swap"
#		TypeInstance "total"
#		DataSource "value"
#	</Metric>
#
#	<Metric "swap_free">
#		Type "swap"
#		TypeInstance "free"
#		DataSource "value"
#	</Metric>
#</Plugin>

#<Plugin hddtemp>
#	Host "127.0.0.1"
#	Port 7634
#	TranslateDevicename false
#</Plugin>

#<Plugin interface>
#	Interface "eth0"
#	IgnoreSelected false
#</Plugin>

#<Plugin ipmi>
#	Sensor "some_sensor"
#	Sensor "another_one"
#	IgnoreSelected false
#	NotifySensorAdd false
#	NotifySensorRemove true
#	NotifySensorNotPresent false
#</Plugin>

#<Plugin iptables>
#	Chain "table" "chain"
#</Plugin>

#<Plugin irq>
#	Irq 7
#	Irq 8
#	Irq 9
#	IgnoreSelected true
#</Plugin>

#<Plugin java>
#	JVMArg "-verbose:jni"
#
#	LoadPlugin "org.collectd.java.GenericJMX"
#	<Plugin "GenericJMX">
#		# See /usr/share/doc/collectd/examples/GenericJMX.conf
#		# for an example config.
#	</Plugin>
#</Plugin>

#<Plugin libvirt>
#	Connection "xen:///"
#	RefreshInterval 60
#	Domain "name"
#	BlockDevice "name:device"
#	InterfaceDevice "name:device"
#	IgnoreSelected false
#	HostnameFormat name
#</Plugin>

#<Plugin madwifi>
#	Interface "wlan0"
#	IgnoreSelected false
#	Source "SysFS"
#	WatchSet "None"
#	WatchAdd "node_octets"
#	WatchAdd "node_rssi"
#	WatchAdd "is_rx_acl"
#	WatchAdd "is_scan_active"
#</Plugin>

#<Plugin mbmon>
#	Host "127.0.0.1"
#	Port 411
#</Plugin>

#<Plugin memcachec>
#	<Page "plugin_instance">
#		Server "localhost"
#		Key "page_key"
#		<Match>
#			Regex "(\\d+) bytes sent"
#			DSType CounterAdd
#			Type "ipt_octets"
#			Instance "type_instance"
#		</Match>
#	</Page>
#</Plugin>

#<Plugin memcached>
#	Socket "/var/run/memcached.sock"
# or:
#	Host "127.0.0.1"
#	Port "11211"
#</Plugin>

#<Plugin mysql>
#	<Database db_name>
#		Host "database.serv.er"
#		Port "3306"
#		User "db_user"
#		Password "secret"
#		Database "db_name"
#		MasterStats true
#	</Database>
#
#	<Database db_name2>
#		Host "localhost"
#		Socket "/var/run/mysql/mysqld.sock"
#		SlaveStats true
#		SlaveNotifications true
#	</Database>
#</Plugin>

#<Plugin netlink>
#	Interface "All"
#	VerboseInterface "All"
#	QDisc "eth0" "pfifo_fast-1:0"
#	Class "ppp0" "htb-1:10"
#	Filter "ppp0" "u32-1:0"
#	IgnoreSelected false
#</Plugin>

#<Plugin network>
#	# client setup:
#	Server "ff18::efc0:4a42" "25826"
#	<Server "239.192.74.66" "25826">
#		SecurityLevel Encrypt
#		Username "user"
#		Password "secret"
#	</Server>
#	TimeToLive "128"
#
#	# server setup:
#	Listen "ff18::efc0:4a42" "25826"
#	<Listen "239.192.74.66" "25826">
#		SecurityLevel Sign
#		AuthFile "/etc/collectd/passwd"
#	</Listen>
#	MaxPacketSize 1024
#
#	# proxy setup (client and server as above):
#	Forward true
#</Plugin>

#<Plugin nginx>
#	URL "http://localhost/status?auto"
#	User "www-user"
#	Password "secret"
#	VerifyPeer false
#	VerifyHost false
#	CACert "/etc/ssl/ca.crt"
#</Plugin>

#<Plugin notify_desktop>
#	OkayTimeout 1000
#	WarningTimeout 5000
#	FailureTimeout 0
#</Plugin>

#<Plugin notify_email>
#	SMTPServer "localhost"
#	SMTPPort 25
#	SMTPUser "my-username"
#	SMTPPassword "my-password"
#	From "collectd@main0server.com"
#	# <WARNING/FAILURE/OK> on <hostname>.
#	# Beware! Do not use not more than two placeholders (%)!
#	Subject "[collectd] %s on %s!"
#	Recipient "email1@domain1.net"
#	Recipient "email2@domain2.com"
#</Plugin>

#<Plugin ntpd>
#	Host "localhost"
#	Port 123
#	ReverseLookups false
#</Plugin>

#<Plugin nut>
#	UPS "upsname@hostname:port"
#</Plugin>

#<Plugin olsrd>
#	Host "127.0.0.1"
#	Port "2006"
#	CollectLinks "Summary"
#	CollectRoutes "Summary"
#	CollectTopology "Summary"
#</Plugin>

#<Plugin openvpn>
#	StatusFile "/etc/openvpn/openvpn-status.log"
#</Plugin>

#<Plugin perl>
#	IncludeDir "/my/include/path"
#	BaseName "Collectd::Plugin"
#	EnableDebugger ""
#	LoadPlugin "foo"
#	LoadPlugin "bar"
#
#	<Plugin foo>
#		Foo "Bar"
#		Qux "Baz"
#	</Plugin>
#</Plugin>

#<Plugin ping>
#	Host "host.foo.bar"
#	Host "host.baz.qux"
#	Interval 1.0
#	Timeout 0.9
#	TTL 255
#</Plugin>

#<Plugin postgresql>
#	<Query magic>
#		Statement "SELECT magic FROM wizard WHERE host = $1;"
#		Param hostname
#
#		<Result>
#			Type gauge
#			InstancePrefix "magic"
#			ValuesFrom "magic"
#		</Result>
#	</Query>
#
#	<Query rt36_tickets>
#		Statement "SELECT COUNT(type) AS count, type \
#		                  FROM (SELECT CASE \
#		                               WHEN resolved = 'epoch' THEN 'open' \
#		                               ELSE 'resolved' END AS type \
#		                               FROM tickets) type \
#		                  GROUP BY type;"
#
#		<Result>
#			Type counter
#			InstancePrefix "rt36_tickets"
#			InstancesFrom "type"
#			ValuesFrom "count"
#		</Result>
#	</Query>
#
#	<Database foo>
#		Host "hostname"
#		Port 5432
#		User "username"
#		Password "secret"
#
#		SSLMode "prefer"
#		KRBSrvName "kerberos_service_name"
#
#		Query magic
#	</Database>
#
#	<Database bar>
#		Service "service_name"
#
#		Query backend # predefined
#		Query rt36_tickets
#	</Database>
#</Plugin>

#<Plugin powerdns>
#	<Server "server_name">
#		Collect "latency"
#		Collect "udp-answers" "udp-queries"
#		Socket "/var/run/pdns.controlsocket"
#	</Server>
#	<Recursor "recursor_name">
#		Collect "questions"
#		Collect "cache-hits" "cache-misses"
#		Socket "/var/run/pdns_recursor.controlsocket"
#	</Recursor>
#	LocalSocket "/opt/collectd/var/run/collectd-powerdns"
#</Plugin>

#<Plugin processes>
#	Process "name"
#	ProcessMatch "foobar" "/usr/bin/perl foobar\\.pl.*"
#</Plugin>

#<Plugin protocols>
#	Value "/^Tcp:/"
#	IgnoreSelected false
#</Plugin>

<Plugin rrdtool>
	DataDir "/var/lib/collectd/rrd"
#	CacheTimeout 120
#	CacheFlush 900
#	WritesPerSecond 30
#	RandomTimeout 0
#
# The following settings are rather advanced
# and should usually not be touched:
#	StepSize 10
#	HeartBeat 20
#	RRARows 1200
#	RRATimespan 158112000
#	XFF 0.1
</Plugin>

#<Plugin sensors>
#	Sensor "it8712-isa-0290/temperature-temp1"
#	Sensor "it8712-isa-0290/fanspeed-fan3"
#	Sensor "it8712-isa-0290/voltage-in8"
#	IgnoreSelected false
#</Plugin>

# See /usr/share/doc/collectd/examples/snmp-data.conf.gz for a
# comprehensive sample configuration.
#<Plugin snmp>
#	<Data "powerplus_voltge_input">
#		Type "voltage"
#		Table false
#		Instance "input_line1"
#		Scale 0.1
#		Values "SNMPv2-SMI::enterprises.6050.5.4.1.1.2.1"
#	</Data>
#	<Data "hr_users">
#		Type "users"
#		Table false
#		Instance ""
#		Shift -1
#		Values "HOST-RESOURCES-MIB::hrSystemNumUsers.0"
#	</Data>
#	<Data "std_traffic">
#		Type "if_octets"
#		Table true
#		InstancePrefix "traffic"
#		Instance "IF-MIB::ifDescr"
#		Values "IF-MIB::ifInOctets" "IF-MIB::ifOutOctets"
#	</Data>
#
#	<Host "some.switch.mydomain.org">
#		Address "192.168.0.2"
#		Version 1
#		Community "community_string"
#		Collect "std_traffic"
#		Inverval 120
#	</Host>
#	<Host "some.server.mydomain.org">
#		Address "192.168.0.42"
#		Version 2
#		Community "another_string"
#		Collect "std_traffic" "hr_users"
#	</Host>
#	<Host "some.ups.mydomain.org">
#		Address "192.168.0.3"
#		Version 1
#		Community "more_communities"
#		Collect "powerplus_voltge_input"
#		Interval 300
#	</Host>
#</Plugin>

#<Plugin table>
#	<Table "/proc/slabinfo">
#		Instance "slabinfo"
#		Separator " "
#		<Result>
#			Type gauge
#			InstancePrefix "active_objs"
#			InstancesFrom 0
#			ValuesFrom 1
#		</Result>
#		<Result>
#			Type gauge
#			InstancePrefix "objperslab"
#			InstancesFrom 0
#			ValuesFrom 4
#		</Result>
#	</Table>
#</Plugin>

#<Plugin "tail">
#	<File "/var/log/exim4/mainlog">
#		Instance "exim"
#		<Match>
#			Regex "S=([1-9][0-9]*)"
#			DSType "CounterAdd"
#			Type "ipt_bytes"
#			Instance "total"
#		</Match>
#		<Match>
#			Regex "\\<R=local_user\\>"
#			DSType "CounterInc"
#			Type "counter"
#			Instance "local_user"
#		</Match>
#	</File>
#</Plugin>

#<Plugin tcpconns>
#	ListeningPorts false
#	LocalPort "25"
#	RemotePort "25"
#</Plugin>

#<Plugin teamspeak2>
#	Host "127.0.0.1"
#	Port "51234"
#	Server "8767"
#</Plugin>

#<Plugin ted>
#	Device "/dev/ttyUSB0"
#	Retries 0
#</Plugin>

#<Plugin thermal>
#	ForceUseProcfs false
#	Device "THRM"
#	IgnoreSelected false
#</Plugin>

#<Plugin unixsock>
#	SocketFile "/var/run/collectd-unixsock"
#	SocketGroup "collectd"
#	SocketPerms "0660"
#</Plugin>

#<Plugin uuid>
#	UUIDFile "/etc/uuid"
#</Plugin>

#<Plugin vmem>
#	Verbose false
#</Plugin>

#<Plugin write_http>
#	<URL "http://example.com/collectd-post">
#		User "collectd"
#		Password "secret"
#	</URL>
#</Plugin>

Include "/etc/collectd/filters.conf"
Include "/etc/collectd/thresholds.conf"

Restart Collectd

/etc/init.d/collectd restart

Install web interface

Install some perl libs

apt-get install librrds-perl libconfig-general-perl libhtml-parser-perl  libregexp-common-perl

Create an apache conf file

edit /etc/apache2/sites-available/stats

ScriptAlias /collectd/bin/ /usr/share/doc/collectd-core/examples/collection3/bin/
Alias /collectd/ /usr/share/doc/collectd-core/examples/collection3/
	 
<Directory /usr/share/doc/collectd-core/examples/collection3/>
    AddHandler cgi-script .cgi
    DirectoryIndex bin/index.cgi
    Options +ExecCGI
    Order Allow,Deny
    Allow from example.com
</Directory>

Enable apache site

a2ensite stats

Restart apache

service apache2 restart

Go to the page

http://localhost/collectd/bin/index.cgi