Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Simone-Zabberoni/zabbix-python-utils

Repository files navigation

Zabbix Python Command line utilities

Collection of CLI tool for various usages:

  • massive host insert
  • massive hostgroup moving
  • massive host details and properties modification
  • data extraction: inventory query, current problems
  • hosts query
  • item data extraction (history and trend)
  • misc automation stuff
  • json parsing/LLD/item prototyping

Caution : sample scripts are mostly without error checking and they assume that you know what you are doing!

Requirements

  • python 2.7 / 3
  • py-zabbix
  • requests

Details and informations

Arguments and env-var - in progress

All scripts will share the base command line with ENV variables support, like

# export ZABBIX_SERVER='https://your_zabbix_host/zabbix/'
# export ZABBIX_PASSWORD='admin'
# export ZABBIX_USERNAME='secretPassword'

Most of them are alreay compliant, other are in progress.

hostBulkInsert.py

From a single csv file:

  • create hostgroups
  • create hosts and
    • assign the correct interface
    • assign them to their correct groups
    • link them to the correct templates
    • add tags and descriptions
    • optional proxy assignment
    • user macros

Usage:

# hostBulkInsert.py -Z http://yourserver/zabbix -u admin -p somePass -f "zabbixHosts.csv" -s
# export ZABBIX_SERVER='https://your_zabbix_host/zabbix/'
# export ZABBIX_USERNAME='admin'
# export ZABBIX_PASSWORD='secretPassword'
# ./hostBulkInsert.py -f HOSTS.csv <- stops with error if hits an existing host
# ./hostBulkInsert.py -f HOSTS.csv -s <- check and skips existing hosts

File format

Sample csv file:

Hostname;IP Address;Groups;Tags;Description;SNMP community;Proxy;Templates;Interfaces;Macros
SomeHost;8.8.8.8;Group1,Group2,Routers;TagName=someValue;Device Description;snmpCommnity;ZabbixProxyName;Template Net Cisco IOS SNMPv2;agent-SNMP; {$SOMETHING}=25
SecondHost;8.8.8.8;Group3,Group2,SiteA;FirstTag=value,TagName=anotherValue;Device Description;snmpCommnity;;Template Net Cisco IOS SNMPv2;agent-SNMP;

Fields:

  • Full hostgroup path is a ',' delimited list of nested hostgroups (Zabbix syntax: group/subgroup1/subgroup2)
  • Templates is a ',' delimited list of existing templates to apply or a DO_NOT_ADD string
  • Interfaces could be agent, snmp or both (agent,SNMP)
  • Tags are separated by ',' in the format TagName=TagValue,AnotherTagName=TagValue
  • Macros are separated by ',' in the format {$ONEMACRO}=102,{$ANOTHERMACRO}=28

TODO

  • proxy existance check and what to do if template does not exists
  • template existance check and what to do if template does not exists
  • convert to the ENV usage all the scripts
  • add documentation

Obsoleted stuff

jsonLLD.py and jsonGet.py (obsoleted by Zabbix HTTP Item in 4.0)

jsonLLD.py: Script for JSON low level discovery, produces JSON for Zabbix LLD according to https://www.zabbix.com/documentation/3.4/manual/discovery/low_level_discovery

Requires a base url and a set of macro:JSONfield to remap original data to Zabbix format

jsonGet.py: Gather data from URL, using a dotted notation

Command line:

$ jsonLLD.py -i https://jsonplaceholder.typicode.com/users -m "{#ID}:id,{#COMPANY}:company.name,{#NAME}:name,{#MAIL}:email"
{
 "data": [
 {
 "{#COMPANY}": "Romaguera-Crona",
 "{#ID}": 1,
 "{#MAIL}": "Sincere@april.biz",
 "{#NAME}": "Leanne Graham"
 },
 {
 "{#COMPANY}": "Deckow-Crist",
 "{#ID}": 2,
 "{#MAIL}": "Shanna@melissa.tv",
 "{#NAME}": "Ervin Howell"
 },
[cut]
$ jsonGet.py -i https://jsonplaceholder.typicode.com/users/10 -f name
Clementina DuBuque
$ jsonGet.py -i https://jsonplaceholder.typicode.com/users/10 -f company.name
Hoeger LLC
$ jsonGet.py -i https://jsonplaceholder.typicode.com/users/10 -f address.geo
{
 "lat": "-38.2386",
 "lng": "57.2232"
}
$ jsonGet.py -i https://jsonplaceholder.typicode.com/users -f 9.company.name
Hoeger LLC

Zabbix implementation:

  • Create a Discovery rule of "Zabbix agent" type and set it to run system.run[/usr/bin/jsonLLD.py] (mind the path!)
  • create an item prototype for each json field you want to work on (ie: Item name: {#NAME} company name, Item key system.run[/usr/bin/jsonGet.py -i {#BASEURL}/{#ID} -f company.name] )

About

Zabbix Utilities in Python - API based massive operations

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /