logstash zabbix output : Création automagique des items !

Hop la !

logstashzabbix1

J’utilise depuis peu le plugin output zabbix de logstash, qui permet d’alimenter un Zabbix avec les données extraites de fichiers de logs. C’est super pratique, mais seulement voila, il faut se taper la création de tous les items à la main (ou via l’API), et ça peut être long est fastidieux.

Du coup, j’ai pris mon courage à 2 mains, et j’ai modifié le plugin zabbix pour qu’il puisse lui même créer les items dans Zabbix. Tout ça grace à la lib zabbixapi.

Les sources sont dispo sur mon github. J’ai fait une pull request en espérant qu’elle soit validée.

Sinon, côté utilisation, c’est super simple, il faut ajouter les champs suivants :

  • « zabbix_host »
  • « zabbix_item_key »
  • « create_zabbix_item » (true / false)
  • « zabbix_item_name »
  • « zabbix_item_description »
  • « zabbix_item_value_type » . Les valeurs possibles sont :
    •  0 – numeric float;
    •  1 – character;
    •  2 – log;
    •  3 – numeric unsigned;
    •  4 – text.
  •  « zabbix_item_data_type ». Les valeurs possibles sont :
    • 0 – decimal;
    • 1 – octal;
    • 2 – hexadecimal;
    • 3 – boolean.
  • « zabbix_item_unit » (Item’s unit if create_zabbix_item is specified)
  • « send_field » (the field name that is sending to Zabbix)

Ce qui donne, par exemple :

grok {
    match => [ "message", "%{SYSLOGBASE} %{DATA:data}" ]
    add_tag => [ "zabbix-sender" ]
    add_field => [
        "zabbix_host", "%{source_host}",
        "zabbix_item_key", "item.key",
        "zabbix_item_name", "Item name",
        "zabbix_item_description", "Item description",
        "zabbix_item_value_type", 0,
        "zabbix_item_data_type", 0,
        "zabbix_item_unit", "record",
        "send_field", "data"
    ]
}

Et enfin, on configure l’output zabbix avec les identifiants de l’API et 2/3 autres options :

output {
    if "zabbix-sender" in [tags] {
        zabbix {
            host => "localhost"
            port => "10051"
            zabbix_sender => "/usr/local/bin/zabbix_sender"
            zabbix_url => "http://localhost/zabbix/api_jsonrpc.php"
            zabbix_user => "api"
            zabbix_pass => "password"
            zabbix_sender_host => "localhost"
            zabbix_user_sender_file => true
            zabbix_sender_file_path => "/tmp/zabbix_sender_
            zabbix_sender_file_with_timestamp => true
            zabbix_sender_flush_count => 100
        }
    }
}

Et voila !

Le plugin va se charger de créer automatiquement les items dans zabbix. plus besoin de tout créer manuellement avant.