iteh-zabbixapi 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .idea/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in zabbixapi.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright [2011] [Eduard Snesarev]
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.rdoc ADDED
@@ -0,0 +1,41 @@
1
+ = Ruby Zabbix Api Module.
2
+
3
+ Simple and lightweight ruby module for work with zabbix api version 1.8.x
4
+
5
+ You can:
6
+ * Create host/template/application/items/triggers and screens;
7
+ * Get info about all zabbix essences;
8
+
9
+ == Installation
10
+
11
+ gem install zabbixapi
12
+
13
+ == Get Start.
14
+
15
+ * Get hostid from zabbix api:
16
+
17
+ zbx = Zabbix::ZabbixApi.new('https://zabbix.example.com', 'login', 'password')
18
+ hostid = zbx.get_host_id('my.example.com')
19
+
20
+ p hostid
21
+
22
+ == Dependencies
23
+
24
+ * net/http
25
+ * net/https
26
+ * json
27
+
28
+ == Use examples
29
+
30
+ * zabbix_la - LoadAverage template
31
+
32
+ cd examples
33
+ ruby zabbix_la -E development -g Templates
34
+
35
+ * -E - env from examples/config.yml (like RAILS_ENV)
36
+ * -g - group in zabbix for templates
37
+
38
+ == Zabbix documentation
39
+
40
+ * Zabbix Project Homepage -> http://zabbix.com/
41
+ * Zabbix Api docs -> http://www.zabbix.com/documentation/1.8/api
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'bundler/gem_tasks'
2
+
3
+
4
+ require 'bundler'
5
+ require 'rspec/core/rake_task'
6
+
7
+ Bundler::GemHelper.install_tasks
8
+ RSpec::Core::RakeTask.new :spec
@@ -0,0 +1,4 @@
1
+ development:
2
+ api_url: "http://zabbix.local/api_jsonrpc.php"
3
+ api_login: admin
4
+ api_password: zabbix
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'getopt/std'
5
+ require 'yaml'
6
+ require 'zabbixapi'
7
+
8
+ opt = Getopt::Std.getopts("g:E:")
9
+
10
+ group_name = opt["g"]
11
+ zabbix_env = opt["E"]
12
+
13
+ template_name = "TMPL_Availability"
14
+
15
+ # read config
16
+ config = YAML::load(open('./config.yml'))
17
+
18
+ api_url = config[zabbix_env]["api_url"]
19
+ api_login = config[zabbix_env]["api_login"]
20
+ api_password = config[zabbix_env]["api_password"]
21
+
22
+
23
+ # Esablish new connection
24
+ zbx = Zabbix::ZabbixApi.new(api_url, api_login, api_password)
25
+
26
+ # Create new template
27
+ p " * Creating template #{template_name}."
28
+ g_id = zbx.get_group_id(group_name)
29
+
30
+ options = {
31
+ 'groups' => [ g_id.to_i ],
32
+ 'host' => template_name
33
+ }
34
+
35
+ t_id = zbx.add_template(options)
36
+
37
+ # Create application #{app_name}
38
+ app_name = "Availability"
39
+ p " ** Create application #{app_name}."
40
+ application = {
41
+ 'hostid' => t_id.to_i,
42
+ 'name' => app_name
43
+ }
44
+ a_id = zbx.add_application(application)
45
+
46
+ # 'Ping.'
47
+ options = {
48
+ 'description' => "Ping",
49
+ 'key_' => "agent.ping",
50
+ 'hostid' => t_id.to_i,
51
+ 'applications' => [ a_id.to_i ],
52
+ 'history' => 7,
53
+ 'trends' => 30,
54
+ 'delay' => 60,
55
+ 'value_type' => 0,
56
+ 'type' => '0'
57
+ }
58
+ p " ** Add 'Ping' to #{template_name}."
59
+ i_id = zbx.add_item(options)
60
+
61
+ # TRIGGERS
62
+ options = {
63
+ 'description' => "Host availability",
64
+ 'expression' => "{#{template_name}:agent.ping.nodata(61)}=1",
65
+ 'priority' => 5, #disaster
66
+ 'templateid' => 0,
67
+ 'comments' => "Host availability",
68
+ 'type' => 0,
69
+ 'status' => '0'
70
+ }
71
+
72
+ p " ** Add 'Host availability disaster trigger'"
73
+ tr_id = zbx.add_trigger(options)
@@ -0,0 +1,152 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'getopt/std'
5
+ require 'yaml'
6
+ require 'zabbixapi'
7
+
8
+ opt = Getopt::Std.getopts("d:g:E:")
9
+
10
+ group_name = opt["g"]
11
+ disk_name = opt["d"]
12
+ zabbix_env = opt["E"]
13
+
14
+ template_name = "TMPL_Disk_" + disk_name.gsub(/\//, "_")
15
+
16
+ # read config
17
+ config = YAML::load(open('./config.yml'))
18
+
19
+ api_url = config[zabbix_env]["api_url"]
20
+ api_login = config[zabbix_env]["api_login"]
21
+ api_password = config[zabbix_env]["api_password"]
22
+
23
+ # Esablish new connection
24
+ zbx = Zabbix::ZabbixApi.new(api_url, api_login, api_password)
25
+ zbx.debug = true
26
+
27
+ # Create new template
28
+ p " * Creating template #{template_name}."
29
+ g_id = zbx.get_group_id(group_name)
30
+
31
+ options = {
32
+ 'groups' => [ g_id.to_i ],
33
+ 'host' => template_name
34
+ }
35
+
36
+ t_id = zbx.add_template(options)
37
+
38
+ # Create application #{app_name}
39
+ app_name = "Disk_" + disk_name.gsub(/\//, "_")
40
+ p " ** Create application #{app_name}."
41
+ application = {
42
+ 'hostid' => t_id.to_i,
43
+ 'name' => app_name
44
+ }
45
+ a_id = zbx.add_application(application)
46
+
47
+ # 'IOPS Read on #{disk_name} avg5'
48
+ options = {
49
+ 'description' => "IOPS Read on #{disk_name} avg5",
50
+ 'key_' => "vfs.dev.read[#{disk_name}, ops, avg5]",
51
+ 'hostid' => t_id.to_i,
52
+ 'applications' => [ a_id.to_i ],
53
+ 'units' => 'ops',
54
+ 'history' => 7,
55
+ 'trends' => 30,
56
+ 'delay' => 300,
57
+ 'value_type' => 0,
58
+ }
59
+ p " ** Add 'IOPS Read on #{disk_name} avg5' to #{template_name}."
60
+
61
+ i_id = zbx.add_item(options)
62
+
63
+ # 'IOPS Write on #{disk_name} avg5'
64
+ options = {
65
+ 'description' => "IOPS Write on #{disk_name} avg5",
66
+ 'key_' => "vfs.dev.write[#{disk_name}, ops, avg5]",
67
+ 'hostid' => t_id.to_i,
68
+ 'applications' => [ a_id.to_i ],
69
+ 'units' => 'ops',
70
+ 'history' => 7,
71
+ 'trends' => 30,
72
+ 'delay' => 300,
73
+ 'value_type' => 0,
74
+ }
75
+ p " ** Add 'IOPS Write on #{disk_name} avg5' to #{template_name}."
76
+
77
+ i_id = zbx.add_item(options)
78
+
79
+ # 'BPS Read on #{disk_name} avg5'
80
+ options = {
81
+ 'description' => "BPS Read on #{disk_name} avg5",
82
+ 'key_' => "vfs.dev.read[#{disk_name}, sps, avg5]",
83
+ 'hostid' => t_id.to_i,
84
+ 'applications' => [ a_id.to_i ],
85
+
86
+ # convert sectors to bytes
87
+ 'multiplier' => 1,
88
+ 'formula' => 512,
89
+
90
+ 'value_type' => 0,
91
+ 'units' => 'Bps',
92
+ 'history' => 7,
93
+ 'trends' => 30,
94
+ 'delay' => 300,
95
+ }
96
+ p " ** Add 'BPS Read on #{disk_name} avg5' to #{template_name}."
97
+
98
+ bps_r_avg5_id = zbx.add_item(options)
99
+
100
+ # 'BPS Write on #{disk_name}'
101
+ options = {
102
+ 'description' => "BPS Write on #{disk_name} avg5",
103
+ 'key_' => "vfs.dev.write[#{disk_name}, sps, avg5]",
104
+ 'hostid' => t_id.to_i,
105
+ 'applications' => [ a_id.to_i ],
106
+
107
+ # convert sectors to bytes
108
+ 'multiplier' => 1,
109
+ 'formula' => 512,
110
+
111
+ 'value_type' => 0,
112
+ 'units' => 'Bps',
113
+ 'history' => 7,
114
+ 'trends' => 30,
115
+ 'delay' => 300
116
+ }
117
+ p " ** Add 'BPS Write on #{disk_name} avg5' to #{template_name}."
118
+
119
+ bps_w_avg5_id = zbx.add_item(options)
120
+
121
+ # Create graph 'Disk usage #{disk_name}'
122
+ options = {
123
+ 'gitems' => [
124
+ {
125
+ "itemid" => bps_w_avg5_id,
126
+ "drawtype" => "0",
127
+ "sortorder" => "0",
128
+ "color" => "AA0000",
129
+ "yaxisside" => "0",
130
+ "calc_fnc" => "2",
131
+ "type" => "0",
132
+ "periods_cnt" => "5"
133
+ },
134
+ {
135
+ "itemid" => bps_r_avg5_id,
136
+ "drawtype" => "0",
137
+ "sortorder" => "0",
138
+ "color" => "009900",
139
+ "yaxisside" => "0",
140
+ "calc_fnc" => "2",
141
+ "type" => "0",
142
+ "periods_cnt" => "5"
143
+ }
144
+ ],
145
+ "show_triggers" => "1",
146
+ "name" => "Disk usage #{disk_name}",
147
+ "width" => "900",
148
+ "height" => "200",
149
+ "templateid" => "0"
150
+ }
151
+ p " ** Add 'Disk usage #{disk_name} graph'"
152
+ g_id = zbx.add_graph(options)
@@ -0,0 +1,249 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'getopt/std'
5
+ require 'yaml'
6
+ require 'zabbixapi'
7
+
8
+ opt = Getopt::Std.getopts("m:g:E:")
9
+
10
+ mount_point = opt["m"]
11
+ group_name = opt["g"]
12
+ zabbix_env = opt["E"]
13
+
14
+ if ( mount_point == "/" )
15
+ template_name = "TMPL_Filesystem_root"
16
+ app_name = "Filesystem_root"
17
+ else
18
+ mount_point = mount_point.sub(/\/$/, "")
19
+ template_name = "TMPL_Filesystem" + mount_point.gsub(/\//, "_")
20
+ app_name = "Filesystem" + mount_point.gsub(/\//, "_")
21
+ end
22
+
23
+ # read config
24
+ config = YAML::load(open('./config.yml'))
25
+
26
+ api_url = config[zabbix_env]["api_url"]
27
+ api_login = config[zabbix_env]["api_login"]
28
+ api_password = config[zabbix_env]["api_password"]
29
+
30
+ # Esablish new connection
31
+ zbx = Zabbix::ZabbixApi.new(api_url, api_login, api_password)
32
+
33
+ # Create new template
34
+ p " * Creating template #{template_name}."
35
+ g_id = zbx.get_group_id(group_name)
36
+
37
+ options = {
38
+ 'groups' => [ g_id.to_i ],
39
+ 'host' => template_name
40
+ }
41
+
42
+ t_id = zbx.add_template(options)
43
+
44
+ # Create application #{app_name}
45
+ p " ** Create application #{app_name}."
46
+ application = {
47
+ 'hostid' => t_id.to_i,
48
+ 'name' => app_name
49
+ }
50
+
51
+ a_id = zbx.add_application(application)
52
+
53
+ # Total disk space on #{mount_point}
54
+ options = {
55
+ 'description' => "Total disk space on #{mount_point}",
56
+ 'key_' => "vfs.fs.size[#{mount_point},total]",
57
+ 'hostid' => t_id.to_i,
58
+ 'applications' => [ a_id.to_i ],
59
+ 'units' => 'B',
60
+ 'history' => 7,
61
+ 'trends' => 30,
62
+ 'delay' => 600,
63
+ 'value_type' => 0
64
+ }
65
+
66
+ p " ** Add 'Total disk space on #{mount_point}' to #{template_name}."
67
+ total_in_b_item_id = zbx.add_item(options)
68
+
69
+ # Used disk space on #{mount_point}
70
+ options = {
71
+ 'description' => "Used disk space on #{mount_point}",
72
+ 'key_' => "vfs.fs.size[#{mount_point},used]",
73
+ 'hostid' => t_id.to_i,
74
+ 'applications' => [ a_id.to_i ],
75
+ 'units' => 'B',
76
+ 'history' => 7,
77
+ 'trends' => 30,
78
+ 'delay' => 60,
79
+ 'value_type' => 0
80
+ }
81
+
82
+ p " ** Add 'Used disk space on #{mount_point}' to #{template_name}."
83
+ used_in_b_item_id = zbx.add_item(options)
84
+
85
+ # Use disk space on #{mount_point} in %
86
+ options = {
87
+ 'description' => "Used disk space on #{mount_point} in %",
88
+ 'key_' => "vfs.fs.size[#{mount_point},pused]",
89
+ 'hostid' => t_id.to_i,
90
+ 'applications' => [ a_id.to_i ],
91
+ 'history' => 7,
92
+ 'trends' => 30,
93
+ 'delay' => 60,
94
+ 'value_type' => 0
95
+ }
96
+
97
+ p " ** Add 'Used disk space on #{mount_point} in %' to #{template_name}."
98
+ i_id = zbx.add_item(options)
99
+
100
+ # Free disk space on #{mount_point}
101
+ options = {
102
+ 'description' => "Free disk space on #{mount_point}",
103
+ 'type' => '15', # calculated
104
+ 'key_' => "vfs.fs.size[#{mount_point},free]",
105
+ 'params' => "last(\"vfs.fs.size[#{mount_point},total]\") - last(\"vfs.fs.size[#{mount_point},used]\")",
106
+ 'hostid' => t_id.to_i,
107
+ 'applications' => [ a_id.to_i ],
108
+ 'units' => 'B',
109
+ 'history' => 7,
110
+ 'trends' => 30,
111
+ 'delay' => 60,
112
+ 'value_type' => 0
113
+ }
114
+
115
+ p " ** Add 'Free disk space on #{mount_point}' to #{template_name}."
116
+ i_id = zbx.add_item(options)
117
+
118
+ # Free disk space on #{mount_point} in %
119
+ options = {
120
+ 'description' => "Free disk space on #{mount_point} in %",
121
+ 'type' => '15', # calculated
122
+ 'key_' => "vfs.fs.size[#{mount_point},pfree]",
123
+ 'params' => "100 - last(\"vfs.fs.size[#{mount_point},pused]\")",
124
+ 'hostid' => t_id.to_i,
125
+ 'applications' => [ a_id.to_i ],
126
+ 'history' => 7,
127
+ 'trends' => 30,
128
+ 'delay' => 60,
129
+ 'value_type' => 0
130
+ }
131
+
132
+ p " ** Add 'Free disk space on #{mount_point} in %' to #{template_name}."
133
+ i_id = zbx.add_item(options)
134
+
135
+ # Free number of inodes on #{mount_point}
136
+ options = {
137
+ 'description' => "Free number of inodes on #{mount_point}",
138
+ 'key_' => "vfs.fs.inode[#{mount_point},free]",
139
+ 'hostid' => t_id.to_i,
140
+ 'applications' => [ a_id.to_i ],
141
+ 'units' => '',
142
+ 'history' => 7,
143
+ 'trends' => 30,
144
+ 'delay' => 60,
145
+ 'value_type' => 0
146
+ }
147
+
148
+ p " ** Add 'Free number of inodes on #{mount_point}' to #{template_name}."
149
+ i_id = zbx.add_item(options)
150
+
151
+ # Free number of inodes on #{mount_point} in %
152
+ options = {
153
+ 'description' => "Free number of inodes on #{mount_point} in %",
154
+ 'key_' => "vfs.fs.inode[#{mount_point},pfree]",
155
+ 'hostid' => t_id.to_i,
156
+ 'applications' => [ a_id.to_i ],
157
+ 'history' => 7,
158
+ 'trends' => 30,
159
+ 'delay' => 60,
160
+ 'value_type' => 0
161
+ }
162
+
163
+ p " ** Add 'Free number of inodes on #{mount_point} in %' to #{template_name}."
164
+ i_id = zbx.add_item(options)
165
+
166
+ ## TRIGGERS
167
+ options = {
168
+ 'description' => "Free disk space on #{mount_point}",
169
+ 'expression' => "{#{template_name}:vfs.fs.size[#{mount_point},pfree].last(0)}<15",
170
+ 'priority' => 2, # warning
171
+ 'templateid' => 0,
172
+ 'comments' => "Free disk space on #{mount_point} (warning)",
173
+ 'type' => 0,
174
+ 'status' => '0'
175
+ }
176
+
177
+ p " ** Add 'Free disk space on #{mount_point} warning trigger'"
178
+ tr_id = zbx.add_trigger(options)
179
+
180
+ options = {
181
+ 'description' => "Free disk space on #{mount_point}",
182
+ 'expression' => "{#{template_name}:vfs.fs.size[#{mount_point},pfree].last(0)}<10",
183
+ 'priority' => 5, # Disaster
184
+ 'templateid' => 0,
185
+ 'comments' => "Free disk space on #{mount_point} (disaster)",
186
+ 'type' => 0,
187
+ 'status' => 0
188
+ }
189
+
190
+ p " ** Add 'Free disk space on #{mount_point} disaster trigger'"
191
+ tr_id = zbx.add_trigger(options)
192
+
193
+ options = {
194
+ 'description' => "Free inodes on #{mount_point}",
195
+ 'expression' => "{#{template_name}:vfs.fs.inode[#{mount_point},pfree].last(0)}<15",
196
+ 'priority' => 2, # warning
197
+ 'templateid' => '0',
198
+ 'comments' => "Free disk inodes on #{mount_point} (warning)",
199
+ 'type' => 0,
200
+ 'status' => '0'
201
+ }
202
+
203
+ p " ** Add 'Free inodes on #{mount_point} warning trigger'"
204
+ tr_id = zbx.add_trigger(options)
205
+
206
+ options = {
207
+ 'description' => "Free inodes on #{mount_point}",
208
+ 'expression' => "{#{template_name}:vfs.fs.inode[#{mount_point},pfree].last(0)}<10",
209
+ 'priority' => 5, #disaster
210
+ 'templateid' => '0',
211
+ 'comments' => "Free disk inodes on #{mount_point} (disaster)",
212
+ 'type' => 0,
213
+ 'status' => '0'
214
+ }
215
+
216
+ p " ** Add 'Free inodes on #{mount_point} disaster trigger'"
217
+ tr_id = zbx.add_trigger(options)
218
+
219
+ options = {
220
+ 'gitems' => [
221
+ {
222
+ "itemid" => total_in_b_item_id,
223
+ "drawtype" => "0",
224
+ "sortorder" => "0",
225
+ "color" => "AA0000",
226
+ "yaxisside" => "0",
227
+ "calc_fnc" => "2",
228
+ "type" => "0",
229
+ "periods_cnt" => "5"
230
+ },
231
+ {
232
+ "itemid" => used_in_b_item_id,
233
+ "drawtype" => "0",
234
+ "sortorder" => "0",
235
+ "color" => "009900",
236
+ "yaxisside" => "0",
237
+ "calc_fnc" => "2",
238
+ "type" => "0",
239
+ "periods_cnt" => "5"
240
+ }
241
+ ],
242
+ "show_triggers" => "1",
243
+ "name" => "Disk space on #{mount_point}",
244
+ "width" => "900",
245
+ "height" => "200",
246
+ "templateid" => "0"
247
+ }
248
+ p " ** Add 'Disk space on #{mount_point} graph'"
249
+ g_id = zbx.add_graph(options)