monitoring open source databases withicinga - percona · object host "demo.icinga.com" {...

43
Percona Live | Dublin | Monitoring Open Source Databases with Icinga 27.09.2017

Upload: dinhnhu

Post on 12-Apr-2018

226 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

Percona Live | Dublin |

Monitoring Open Source Databases with Icinga

27.09.2017

Page 2: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

• Bernd Erk

• Icinga Co-founder

• Working @netways

• @gethash

Page 3: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

Introduction to Icinga2

Page 4: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

Quick Poll

Page 5: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

Icinga is a scalable and extensible monitoring system

which checks the availability of your resources, notifies

users of outages and provides extensive metrics.

availability notifiesmetrics

Page 6: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

Checker

Notify

Gelf

Perfdata Graphite

IDO

Compat

Livestatus

• Multithreaded

• Modular Features

• Zone support

• Secure Agent

• No Nagios®

Page 7: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

• Availability and scaling zones

• Automatic redistribution of checks

• Zones for multitenancy environments

zones

redistribution

multitenancy

Page 8: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

Monitoring Databases

Page 9: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

• MySQL | MariaDB | Percona

• PostgreSQL

• MongoDB

• Firebird

• SQLite

MongoDB

PostgreSQL

MySQLish

Page 10: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

• check_mongodb_py

• connect

• connections

• replicaton_lag

• memory

• memory_mapped

• lock

• flushing

https://github.com/mzupan/nagios-plugin-mongodb

• last_flush_time• replset_state• index_miss_ratio• collections• database_size• database_indexes• replica_primary

Page 11: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

• check_postgres.pl

• archive_ready• autovac_freeze• backends• bloat• checkpoint• cluster_id• commitratio• connection• custom_query

https://bucardo.org/check_postgres/check_postgres.pl.html

• disabled_triggers

• disk_space

• fsm_pages

• prepared_txns

• query_runtime

• query_time

• replicate_row

• same_schema

• sequence

• settings_checksum

Page 12: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

• check_mysql_health

• connection-time

• uptime

• threads-connected

• threadcache-hitrate

• qcache-hitrate

• qcache-lowmem-prunes

• bufferpool-hitrate

https://labs.consol.de/de/nagios/check_mysql_health/

• bufferpool-wait-free• log-waits• tablecache-hitrate• table-lock-contention• index-usage• tmp-disk-tables• slow-queries

Page 13: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

What needs to be monitored?

Monitoring Databases

Page 14: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

• Availability

• Troubleshooting

• Replication-Status

• Capacity

• Metrics and performance data

Page 15: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

How does it work?

Monitoring Databases

Page 16: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

It is all about automation

Page 17: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"
Page 18: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

Icinga2 - API

Page 19: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

• HTTP with RESTful Url Schema

• X.509 and/or Basic Auth

• Create, Modify and Delete objects

• Event Stream based on Types and Filters

RESTful

Page 20: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

Configuration

Page 21: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

• Objects

• Rule based

• Conditions

• Loops

• Custom Functions

Page 22: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

object Host "demo.icinga.com" { import "generic-host"

address = "127.0.0.1" address6 = "::1"

vars.os = "Linux }

vars.os = "Linux"

Page 23: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

Rules

Page 24: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

apply Service "ssh" { import "generic-service"

check_command = "ssh"

assign where host.vars.os == "Linux"ignore where host.vars.dev == true

}

assign

Page 25: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"
Page 26: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

More Rules

Page 27: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

object Host "demo.icinga.com" { import "generic-host"

address = "127.0.0.1" address6 = "::1"

vars.http_vhosts["Icinga Web 2"http_uri = "/icingaweb2"

}

vars.http_vhosts["Grafana"] = {http_port = 3000

}}

vars.http_vhosts["Icinga Web 2"] = {http_uri = "/icingaweb2"

}

Page 28: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

apply Service for (

){import "generic-service"

display_name = "http " + http_vhostcheck_command = "http"

}vars += config

http_vhost => config in host.vars_http_vhosts

Page 29: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"
Page 30: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

const MySQLIcingaUsername = "root“

const MySQLIcingaPassword = “root“

template Host "base-host-mysql" {

vars.mysql_health_username = MySQLIcingaUsername

vars.mysql_health_password = MySQLIcingaPassword

vars.os = "Linux“

}

object Host "live-mysql-1" {

import "base-host-mysql"

check_command = "hostalive"

address = "127.0.0.1"

vars.dbtype = "mysql“

}

mysql

Linux

Page 31: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

/*

* Apply for MySQLish basic connection

*/

apply Service "mysql_connection" {

import "generic-service"

check_interval = 10s

retry_interval = 30s

check_command = "mysql_health"

vars.mysql_health_username = host.vars.mysql_health_username

vars.mysql_health_password = host.vars.mysql_health_password

vars.mysql_health_mode = "connection-time"

assign where (host.address || host.address6) && host.vars.dbtype == "mysql“

}

mysql

Page 32: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

object Host "live-mysql-1" {

import "base-host-mysql"

check_command = "hostalive"

address = "127.0.0.1"

vars.dbtype = "mysql"

/* database checks */

vars.databases["icinga"] = {

mysql_health_warning = 2048//MB

mysql_health_critical = 4096//MB

}

vars.databases["icingaweb2"] = {

mysql_health_warning = 4096 //MB

mysql_health_critical = 8192 //MB

}

}

vars.databases

Page 33: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

/*

* Apply for MySQLish database size

*/

apply Service "mysql_size_" for (db_name => config in host.vars.databases) {

import "generic-service"

check_interval = 10s

retry_interval = 30s

check_command = "mysql_health"

vars.mysql_health_username = host.vars.mysql_health_username

vars.mysql_health_password = host.vars.mysql_health_password

vars.mysql_health_mode = "sql"

vars.mysql_health_name = "select sum(data_length + index_length) / 1024 / 1024 from

information_schema.tables where table_schema = '" + db_name + "';"

vars.mysql_health_name2 = "db_size"

vars.mysql_health_units = "MB"

assign where (host.address || host.address6) && host.vars.dbtype == "mysql”

}

vars.databases

Page 34: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

Conditions

Page 35: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

apply Service "dummy" {import "generic-service"

check_command = "dummy"

if (host.vars.environment == "dev {check_interval = 30m

} else {check_interval = 5m

}

assign where match("srv-*", host.name)}

if (host.vars.environment == "dev")

Page 36: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

Functions

Page 37: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

object Service ”Load" { check_command = "load”host_name = ”backup.abc.com”

vars.load_warning = {{{

return 20} else {

return 5 }

}}

}

if (get_time_period("backup").is_inside)

Page 38: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

Template Library

Page 39: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

object CheckCommand "mysql_health" {

import "ipv4-or-ipv6"

command = [ PluginContribDir + "/check_mysql_health" ]

arguments = {

"--hostname" = {

value = "$mysql_health_hostname$"

description = "the database server's hostname"

}

"--port" = {

value = "$mysql_health_port$"

description = "the database's port“

...

mysql_health

Page 40: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

• ITL (Icinga Template Library)

• mysql_health

• postgres

• mongodb

• mssql_health

• db2_health

• oracle_health

• elasticsearch

• redis/usr/share/icinga2/include/plugins-contrib.d/databases.conf

Page 41: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

Conclusion

Page 42: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

• Download Icinga 2 and Icinga Web 2

• Play with the Vagrant boxes

• Rethink your configuration

• Give us feedback

Icinga2 on Docker or Vagrant

Page 43: Monitoring Open Source Databases withIcinga - Percona · object Host "demo.icinga.com" { import "generic-host" address = "127.0.0.1" address6 = "::1" vars.http_vhosts["IcingaWeb 2"

www.icinga.com

github.com/icinga

Thank You!

@icinga

/icinga

+icinga