زبیکس API به ویژه هنگامی که از تلفیق زبیکس با نرم افزارهای شخص ثالث مانند پیکربندی و سیستم های مدیریت حوادث و همچنین اتوماسیون کارهای روزمره استفاده می شود، نقش مهمی را ایفا می کند. مدیریت نظارت بر هزاران هاست بدون برخی از عملیات اتوماسیون در محل کار بسیار باورنکردنی و سخت است!

API در زبیکس نسخه ۱.۸ معرفی شد و کاربرد گسترده ای دارد. کلیه نرم افزار های تلفن همراه زبیکس بر اساس API ساخته شده اند، حتی جلوی وب بومی نیز تا حدودی بر اساس آن ساخته شده است. برنامه واسط API معماری را انعطاف پذیرتر می کند و به جلوگیری از تماس مستقیم با پایگاه داده کمک می کند.

زبیکس API دو عملکرد اصلی را ارائه می دهد:

  • مدیریت پیکربندی زبیکس از راه دور
  • بازیابی پیکربندی و داده های تاریخی از راه دور

آماده سازی محیط

در اینجا از PERL استفاده کرده تا یک مثال “Hello API” را عملی کنیم.

API زبیکس بر اساس مشخصات JSON-RPC 2.0 است و Perl ماژول بسیار خوبی را برای کار با پروتکل JSON-RPC با نام JSON::RPC ارائه می دهد. برای استفاده از ماژول PERL دستور زیر را بر روی محیط UBUNTU اجرا کردم.

sudo apt-get install libjson-rpc-perl

عالی! اکنون ما آماده انجام برخی از عملیات ها هستیم.

احراز هویت

هر کاربر زبیکس که توسط API به سرور وصل می شود باید حقیقتا تایید هویت شود تا کاربر نا معتبر به داده ها دسترسی پیدا نکند. متد User.login این عملیات را به همان شکلی که ما میخواهیم انجام میدهد.

این روش یک نام کاربری و رمزعبور را می پذیرد و شناسه هویت (Authentication ID) را برمی گرداند ،این شناسه یک هش (hash) امن برای تماس های پیوسته API می باشد.

به کد auth.pl توجه نمایید.

#!/usr/bin/perl

use ۵.۰۱۰;

use strict;

use warnings;

use JSON::RPC::Client;

use Data::Dumper;

# Authenticate yourself

my $client = new JSON::RPC::Client;

my $url = ‘http://testserver.zabbix.com/zabbix/api_jsonrpc.php’;

my $authID;

my $response;

my $json = {

jsonrpc => “۲.۰”,

method => “user.login”,

params => {

user => “Admin”,

password => “zabbix”

},

id => ۱

};

$response = $client->call($url, $json);

# Check if response was successful

die “Authentication failed\n unless $response->content->{‘result’};

$authID = $response->content->{‘result’};

print “Authentication successful. Auth ID: “ . $authID . \n;

توجه داشته باشید که برای مطابقت با تنظیمات خود، باید $url و همچنین user name و password  را تغییر دهید.

بیایید آن را اجرا کنیم:

zabbix@testserver:~$ ./auth.pl

Authentication successful. Auth ID: 15ff2edb84ce8e16585e035da42c1e9d

zabbix@testserver:~$

بسیار خوب، کد auth.pl ما به خوبی عمل کرد. و ما در حال حاضر صاحب یک شناسه تایید هستیم که میتوانیم از طریق آن عملیات های خود را انجام دهیم. و دائم از این کد در جاهای مختلف استفاده کنیم.

دریافت لیست هاست ها

اسکریپت hosts.pl دقیقاً همان کاری را انجام می دهد که auth.pl قبلاً انجام داده است اما همچنین از متد host.get برای دریافت لیست هاست های موجود استفاده می کند.

#!/usr/bin/perl

use ۵.۰۱۰;

use strict;

use warnings;

use JSON::RPC::Client;

use Data::Dumper;

# Authenticate yourself

my $client = new JSON::RPC::Client;

my $url = ‘http://testserver.zabbix.com/zabbix/api_jsonrpc.php’;

my $authID;

my $response;

my $json = {

jsonrpc => “۲.۰”,

method => “user.login”,

params => {

user => “Admin”,

password => “zabbix”

},

id => ۱

};

$response = $client->call($url, $json);

# Check if response was successful

die “Authentication failed\n unless $response->content->{‘result’};

$authID = $response->content->{‘result’};

print “Authentication successful. Auth ID: “ . $authID . \n;

# Get list of all hosts using authID

$json = {

jsonrpc=> ‘۲.۰’,

method => ‘host.get’,

params =>

{

output => [‘hostid’,‘name’],# get only host id and host name

sortfield => ‘name’,        # sort by host name

},

id => ۲,

auth => “$authID”,

};

$response = $client->call($url, $json);

# Check if response was successful

die “host.get failed\n unless $response->content->{result};

print “List of hosts\n—————————–\n;

foreach my $host (@{$response->content->{result}}) {

print “Host ID: “.$host->{hostid}.” Host: “.$host->{name}.\n;

}

اسکریپت لیستی از تمام هاست های ما را که بر اساس نام میزبان مرتب شده اند را بازگردانی می کند:

zabbix@testserver:~$ ./hosts.pl

Authentication successful. Auth ID: a2977c028faa93bb34d4ed9f2d379d9f

List of hosts

—————————–

Host ID: 10085 Host: MySQL DB

Host ID: 10086 Host: Oracle DB

Host ID: 10087 Host: PostgreSQL DB

Host ID: 10088 Host: Test 001

Host ID: 10089 Host: Test 002

Host ID: 10090 Host: Test 003

Host ID: 10084 Host: Zabbix server

zabbix@testserver:~$

گردش (جریان) داده ها:

نمودار زیر نمایانگر جریان معمولی داده ها هنگام کار با زبیکس API است.

احراز هویت (متد user.login) یک گام اجباری است که برای دریافت شناسنامه احتیاج دارد. شناسه اجازه می دهد تا با هر متد API ارتباط برقرار کنیم مشروط بر اینکه مجوز کافی داشته باشیم.

جریان داده API زبیکس

جریان داده API زبیکس

من به خاطر سادگی، متد user.logout را در اسکریپت های PERL بیان نکردم. این متد شناسه تأیید اعتبار را باطل می کند، بنابراین دیگر نمی توان از آن استفاده کرد. همچنین می توانید از تابع ()Dumper که در بسته عالی Data::Dumper وجود دارد در کد خود استفاده کنید تا پاسخ JSON را با فرمت قابل خواندن انسانی دریافت کنید:

Dumper($response->content);

نتیجه آن شبیه زیر می باشد:

$VAR1 = {

‘jsonrpc’ => ‘2.0’,

‘id’ => 2,

‘result’ => [

{

‘name’ => ‘MySQL DB’,

‘hostid’ => ‘10085’

},

{

‘name’ => ‘Oracle DB’,

‘hostid’ => ‘10086’

},

{

‘name’ => ‘PostgreSQL DB’,

‘hostid’ => ‘10087’

},

{

‘name’ => ‘Test 001’,

‘hostid’ => ‘10088’

},

{

‘name’ => ‘Test 002’,

‘hostid’ => ‘10089’

},

{

‘name’ => ‘Test 003’,

‘hostid’ => ‘10090’

},

{

‘name’ => ‘Zabbix server’,

‘hostid’ => ‘10084’

}

]

};

امیدوارم این مقاله مفید واقع شده باشد و درزمینه استفاده از  Zabbix 2.0 API برای عملکرد های پایه ای استفاده گردد. به نظر شما استفاده از API آسان نیست؟!