In zabbix
we dont have a better way to capture snmptraps
. we have to manually create an item
and corresponfding trigger
to handle a trap arriving from the device.
Here is what we are doing to do this in more efficient way.
Create a CSV file which contains all the OID and details about it, typically using MIB browser like ireasoning
.
This will give us an initial CSV to start with, which can update to make sure we have a CSV required as mentioned below.
Here is what we are doing in this script.
- Get all the MIB files for the Device.
- Generate a CSV file which contains all the information for the Traps.
- Run the python script and create a zabbix template.
- Upload the template to zabbix.
Code Location.
Here is the Location for the Script. Github Script Location
https://github.com/ahmedzbyr/zabbix-automations/tree/master/template_creator_from_snmptrap
Get all the MIB files for the Device.
Load MIB files
Selecting files.
Loading completed, select traps
to export
Export trap
s to CSV, here the file.
Generate a CSV file which contains all the information for the Traps.
Converting the exported CSV to the below format so that we can parse it.
Run the python script and create a zabbix template.
Checking the file.
Executing script.
New template created.
Created XML file.
Upload the template to zabbix.
Importing the newly created template.
Choose XML template file.
Selecting the template xml file.
Import complete.
Here is how the template looks like.
Preparing the CSV file.
IMPORTANT thing for the script is to create the CSV file. After this all we have to do is to import
the template and use them.
More refinement needs to be done in the regex_expression
used in triggers
to capture snmptraps
more efficiently. Current regex_expression
looks as below
'snmptrap["(\\b' + alarm_values['oid'] + '$\\b)"]'
We are looking for the ALARM
as a whole word, and should be the end of line
suggested by $
in the trapfile, which is updated by the trap which originates, default location for traps in zabbix is /tmp/zabbix_traps.tmp
, more information on this can be found in this link.
Step 0
Before we start use iReasoning to export trap into a CSV file. This will help us to create the file below.
Step 1:
Create a file with below header.
MIB-MODULE,MIB File,OID,Name,Recommended Action,Comments,Description,Trigger Description,Dependency,cleartime In Days
- MIB-MODULE : MIB Module name information, this can be got from the export file.
- MIB File : File name from which the OID was extracted.
- OID : OID to be process and captured in zabbix
snmptrap
. - Name : Trap Name
- Recommended Action : Recommended action or the priority which can be assigned. We can used these string in this column
Discard
,Threshold
,Clear
,Log
,Information
,Minor
,Average
,Major
,Critical
. - Comments : Any comments required, this is not used in the script. [OPTIONAL]
- Description : Detail description can be found in the export file generated using ireasoning MIB browser.
- Trigger Description : Trigger name which needs to be displayed in an event of Alarm [Max 255 characters]
- Dependency : Enter the OID which is dependent.
Example to add dependency.
If `.1.3.6.1.4.1.37963.6.3.1.3.3` == Clear Trap for `.1.3.6.1.4.1.37963.6.3.1.3.2` then
1. Set Recommended Action for oid `.1.3.6.1.4.1.37963.6.3.1.3.3` as `Clear`
2. Set `.1.3.6.1.4.1.37963.6.3.1.3.3` as the Dependency for `.1.3.6.1.4.1.37963.6.3.1.3.2`
Else
1. Set Dependency for `.1.3.6.1.4.1.37963.6.3.1.3.2` as `NONE`
- cleartime In Days : Clear trap in days 3d (
d
regers to Days, by default the value is inseconds
.)
Understanding directory structure.
Below are the directory structure which has the file.
- input_csv : As the name suggests input csv as in the format mentioned above.
- templates : After executing the below script, files will be located in this directory.
Using script in code.
We can import the file and create small snippet. This will help in automating creation of templates if we need to create them for multiple devices.
import zabbix_snmptrap_template_import_from_csv
file_processing_list = [{'file_path': 'input_csv/ams_bru_hkg_ggsn.csv',
'template_name': 'Template SNMP Traps GGSN Nodes',
'template_group': 'Custom Template GT'}]
for file_to_process in file_processing_list:
print file_to_process
xml_tree_gen_as_string =
zabbix_snmptrap_template_import_from_csv.zabbix_snmptrap_template_import_from_fogg_csv \
(file_to_process['file_path'], file_to_process['template_name'],
file_to_process['template_group'])
zabbix_snmptrap_template_import_from_csv.xml_pretty_me \
('templates/' + file_to_process['template_name'].lower().replace(' ', '-') +
'-item-template-trigger-import.xml', xml_tree_gen_as_string)
Using python script directly
Below is an example command to execute the script from command.
[ahmed@zabbix-server-master ~]$ python zabbix_snmptrap_template_import_from_csv.py \
-e input_csv/hp_hh3c_node_traps.csv -n "Template SNMP Traps HP Nodes" -g "Custom Template Globe Touch" -d
Here are more options using -h
.
[ahmed@zabbix-server-master ~]$ python zabbix_snmptrap_template_import_from_csv.py -h
usage: zabbix_snmptrap_template_import_from_csv.py [-h] -e EXPORT_CSV -n
TEMPLATE_NAME -g
TEMPLATE_GROUP [-d] [-v]
optional arguments:
-h, --help show this help message and exit
-e EXPORT_CSV, --export-csv EXPORT_CSV
OID file, Gives all OIDs on the device
-n TEMPLATE_NAME, --template-name TEMPLATE_NAME
Template name as given in Zabbix server.
-g TEMPLATE_GROUP, --template-group TEMPLATE_GROUP
Template Group which the Template belongs to, as in
Zabbix server.
-d, --debug Running Debug mode - More Verbose
-v, --verbose Running Debug mode - More Verbose
IMPORTANT thing for the script is to create the CSV file. After this all we have to do is to import
the template and use them.
More refinement needs to be done in the regex_expression
used in triggers
to capture snmptraps
more efficiently. Current regex_expression
looks as below
'snmptrap["(\\b' + alarm_values['oid'] + '$\\b)"]'
We are looking for the ALARM
as a whole word, and should be the end of line
suggested by $
in the trapfile, which is updated by the trap which originates, default location for traps in zabbix is /tmp/zabbix_traps.tmp
, more information on this can be found in this link.