pavelnemirovsky / zabbix-redis-template

Multi Instance Redis Discovery Template for Zabbix

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Redis Template for Zabbix

Redis General View

Dashboard

Table of Contents

Features

  • Ability to discovery multiple Redis instances running on same host
  • Generate automatically a zabbix screen for general statistics, commands and replication overview on host! level.
  • Triggers identify command anomaly (not done yet) and instance crash

Installation

  • Import zbx_template/zbx_export_templates.xml via Zabbix -> Configuration -> Templates -> Import
  • Place zbx_template/zbx_redis_discovery.sh under /usr/bin/zbx_redis_discovery.sh
  • Place template userparameters under /etc/zabbix/zabbix_agentd.d/ or other place according your installation
  • Restart your zabbix agent where all above were placed

Installation (OPTIONAL)

  • Replace following line your.first.redis.host.local under zbx_screens/zbx_export_screens.xml with your first redis host
  • Import saved file zbx_export_screens.xml via Zabbix -> Monitoring -> Screens

Important

  • Make sure your redis-server configuration file ends with .conf otherwise INSTANCE name won't be discovered
  • Discovery produce stats files from where template gathers stats per 1 min basis, so important to leave discovery rules to run with short interval only. (current template do that each 1 min)
  • You don't have to worry about discovery process to update all items per 1 min basic, actually Zabbix Server use its own cache and perform DB update only when there is a new item appears.

Debuging / Issue reporting

  • if Discovery: "Discover Redis Instances" doesn't work: execute following command zbx_template/zbx_redis_discovery.sh general debug and output attach to the issue ticket
  • if Discovery: "Discover Redis Commands" doesn't work: execute following command zbx_template/zbx_redis_discovery.sh stats debug and output attach to the issue ticket
  • if Discovery: "Discover Redis Slaves" doesn't work: execute following command zbx_template/zbx_redis_discovery.sh replications debug and output attach to the issue ticket

Plans

  • Keep pushing on Zabbix R&D to let create graphs with multiple prototype items, meanwhile use Zabbix Grafana

Discovery with Statistics Report Flow

Discovery Flow

Example Instance Discovery:

zabbix_get -s redis.host.me -k redis.discovery[general,"123456 123456"] | jq .
{
  "data": [
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6399",
      "{#INSTANCE}": "INSTANCE1",
      "{#RDB_PATH}": "/usr/share/redis/instance1.rdb"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6395",
      "{#INSTANCE}": "INSTANCE2",
      "{#RDB_PATH}": "/usr/share/redis/instance2.rdb"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6397",
      "{#INSTANCE}": "INSTANCE3",
      "{#RDB_PATH}": "/usr/share/redis/instance3.rdb"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6389",
      "{#INSTANCE}": "INSTANCE4",
      "{#RDB_PATH}": "/usr/share/redis/instance4.rdb"
    }
  ]
}

Example Commands Stats Discovery:

zabbix_get -s redis.host.me -k redis.discovery[stats,"123456 123456"] | jq .
{
  "data": [
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6399",
      "{#COMMAND}": "cmdstat_auth",
      "{#INSTANCE}": "INSTANCE1"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6399",
      "{#COMMAND}": "cmdstat_ping",
      "{#INSTANCE}": "INSTANCE1"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6399",
      "{#COMMAND}": "cmdstat_info",
      "{#INSTANCE}": "INSTANCE1"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6399",
      "{#COMMAND}": "cmdstat_config",
      "{#INSTANCE}": "INSTANCE1"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6399",
      "{#COMMAND}": "cmdstat_slowlog",
      "{#INSTANCE}": "INSTANCE1"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6395",
      "{#COMMAND}": "cmdstat_auth",
      "{#INSTANCE}": "INSTANCE2"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6395",
      "{#COMMAND}": "cmdstat_ping",
      "{#INSTANCE}": "INSTANCE2"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6395",
      "{#COMMAND}": "cmdstat_info",
      "{#INSTANCE}": "INSTANCE2"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6395",
      "{#COMMAND}": "cmdstat_config",
      "{#INSTANCE}": "INSTANCE2"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6395",
      "{#COMMAND}": "cmdstat_slowlog",
      "{#INSTANCE}": "INSTANCE2"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6397",
      "{#COMMAND}": "cmdstat_set",
      "{#INSTANCE}": "INSTANCE3"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6397",
      "{#COMMAND}": "cmdstat_select",
      "{#INSTANCE}": "INSTANCE3"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6397",
      "{#COMMAND}": "cmdstat_auth",
      "{#INSTANCE}": "INSTANCE3"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6397",
      "{#COMMAND}": "cmdstat_ping",
      "{#INSTANCE}": "INSTANCE3"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6397",
      "{#COMMAND}": "cmdstat_info",
      "{#INSTANCE}": "INSTANCE3"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6397",
      "{#COMMAND}": "cmdstat_config",
      "{#INSTANCE}": "INSTANCE3"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6397",
      "{#COMMAND}": "cmdstat_slowlog",
      "{#INSTANCE}": "INSTANCE3"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6389",
      "{#COMMAND}": "cmdstat_auth",
      "{#INSTANCE}": "INSTANCE4"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6389",
      "{#COMMAND}": "cmdstat_ping",
      "{#INSTANCE}": "INSTANCE4"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6389",
      "{#COMMAND}": "cmdstat_info",
      "{#INSTANCE}": "INSTANCE4"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6389",
      "{#COMMAND}": "cmdstat_config",
      "{#INSTANCE}": "INSTANCE4"
    },
    {
      "{#HOST}": "127.0.0.1",
      "{#PORT}": "6389",
      "{#COMMAND}": "cmdstat_slowlog",
      "{#INSTANCE}": "INSTANCE4"
    }
  ]
}

Example Commands Stats Discovery:

zabbix_get -s redis.host.me -k redis.discovery[replication] | jq .
{
 "data": [
   {
     "{#HOST}": "127.0.0.1",
     "{#PORT}": "6400",
     "{#SLAVE}": "slave0",
     "{#INSTANCE}": "INSTANCE1"
   },
   {
     "{#HOST}": "127.0.0.1",
     "{#PORT}": "6400",
     "{#SLAVE}": "slave1",
     "{#INSTANCE}": "INSTANCE1"
   },
   {
     "{#HOST}": "127.0.0.1",
     "{#PORT}": "6400",
     "{#SLAVE}": "slave2",
     "{#INSTANCE}": "INSTANCE1"
   },
   {
     "{#HOST}": "127.0.0.1",
     "{#PORT}": "6400",
     "{#SLAVE}": "slave4",
     "{#INSTANCE}": "INSTANCE1"
   },
   {
     "{#HOST}": "127.0.0.1",
     "{#PORT}": "6400",
     "{#SLAVE}": "slave5",
     "{#INSTANCE}": "INSTANCE1"
   }
 ]
}    

About

Multi Instance Redis Discovery Template for Zabbix

License:MIT License


Languages

Language:Shell 100.0%