Coder Social home page Coder Social logo

zabbix-rpc's Introduction

Zabbix RPC
Zabbix RPC

A powerfull and easy to use Zabbix API integrator

npm npm GitHub top language Zabbix-rpc license

FeaturesHow To UseMethodsParametersData typesLicense

Features

This is a javascript package that allows you to programmatically retrieve and modify the configuration of Zabbix and provides access to historical and monitoring data.

It is widely used to:

  • Create new applications to work with Zabbix.
  • Integrate Zabbix with third party software.
  • Automate routine tasks.
  • Get monitoring data.

and provides you:

  • Easy to use methods.
  • Asynchronous calls.
  • Multiple instances and users.
  • IDE Friendly documentation.

How to use

The package is designed to be as intuitive as possible.

Installation

This is a Node.js module available through the npm registry. It is done using the npm install command:

$ npm install zabbix-rpc

Then you must import the package where you want to run it

const Zabbix = require('zabbix-rpc')

Instances

You can create multiple instances to use different servers or the same server with different users. For example, to create an instance and log in

const z = new Zabbix('https://example.com/zabbix')

z.user.login('username', 'password')

The session remains active until logout() is called or terminated by the zabbix server. It is recommended to always log out at the end to prevent the generation of a large number of open session records.

z.user.logout()

You can check if the session is started by passing the authentication hash as a parameter or leaving it empty to take the previously defined

z.user.check().then(console.log)

Basic methods

Once you have successfully logged in, you can make any type of query, as long as it is compatible with the server version.

Since each method makes a request to the server, they will always return a promise.

let hosts = await z.host.get()

z.version().then(console.log)

let recentProblems = await z.problem.get({ "recent": true })

Params

As you can see you can pass the parameters allowed by Zabbix as arguments of the methods

let groups = await z.host.group.get({
  output: ['groupid', 'name'],
  filter: {
    "name": ['group1', 'group2']
  },
})

let hosts = await z.host.get({
  groupids: [groups[0].groupid],
  output: ['hostid', 'name']
})

let hostids = hosts.map((host) => host.hostid)

let items = await z.item.get({
  hostids: hostids,
  search: {
    "name": ['Ping']
  },
  output: [ 'hostid', 'lastclock', 'lastns', 'lastvalue', 'prevvalue']
})

Alternative calls

If you want, like other packages, you can use the JSON-RPC 2.0 protocol directly with z.call()

z.call({
  "jsonrpc": "2.0",
  "method": "apiinfo.version",
  "params": [],
  "id": 123456,
  "auth": null
})

or its shorter version

z.call("apiinfo.version", [])

Error handling

All errors will be returned as JSON with an error variable defined. It will contain details of the error

{
  error: {
    code: -32602,
    message: 'Invalid params.',
    data: 'Session terminated, re-login, please.',
    on_rpc: {
      jsonrpc: '2.0',
      method: 'user.checkAuthentication',
      params: { sessionid: '0' },
      id: 5,
      auth: null
    },
    url: 'http://example.com/zabbix/api_jsonrpc.php'
  }
}

Methods

Currently all the functionalities of versions 3.0 to 5.0 are supported and tested. You can use all these different classes or methods:

Monitoring

The Zabbix API allows you to access history and other data gathered during monitoring.

Class
history .get()
trend .get()
event .acknowledge() .get()
problem .get()
service .create() .delete() .get() .getsla() .update()
service.dependencies .add() .delete()
service.times .add() .delete()
task .create()

Configuration

The Zabbix API allows you to manage the configuration of your monitoring system.

Class
action .create() .delete() .get() .update()
alert .get()
application .create() .delete() .get() .update()
application.mass .add()
autoregistration .get() .update()
configuration .export() .import()
correlation .create() .delete() .get() .update()
dashboard .create() .delete() .get() .update()
discovered.service .get()
discovered.host .get()
discovery.check .get()
discovery.rule .create() .delete() .get() .update()
graph .create() .delete() .get() .update()
graph.item .get()
graph.prototype .create() .delete() .get() .update()
host .create() .delete() .get() .update()
host.mass .add() .remove() .update()
host.group .create() .delete() .get() .update()
host.group.mass .add() .remove() .update()
host.interface .create() .delete() .get() .update() .replace()
host.interface.mass .add() .remove()
host.prototype .create() .delete() .get() .update()
httptest .create() .delete() .get() .update()
item .create() .delete() .get() .update()
item.prototype .create() .delete() .get() .update()
maintenance .create() .delete() .get() .update()
map .create() .delete() .get() .update()
mediatype .create() .delete() .get() .update()
screen .create() .delete() .get() .update()
screen.item .create() .delete() .get() .update() .updatebypos()
template .create() .delete() .get() .update()
template.mass .add() .remove() .update()
template.screen .copy() .create() .delete() .get() .update()
template.screen.item .get()
trigger .create() .delete() .get() .update()
trigger.dependencies .add() .delete()
trigger.prototype .create() .delete() .get() .update()

Administration

With the Zabbix API you can change administration settings of your monitoring system.

Class
user .check() .login() .logout()
user .create() .delete() .get() .update()
user.group .create() .delete() .get() .update()
user.macro .create() .delete() .get() .update()
iconmap .create() .delete() .get() .update()
image .create() .delete() .get() .update()
valuemap .create() .delete() .get() .update()
proxy .create() .delete() .get() .update()
script .create() .delete() .execute() .get() .getbyhosts()
apiinfo .version()

Basic parameters

Each classes has its own parameter definitions, but all .get() methods have some in common. The following parameters are supported by all .get() methods:

Parameter Type Description
countOutput boolean Return the number of records in the result instead of the actual data.
editable boolean If set to true return only objects that the user has write permissions to.

Default: false
excludeSearch boolean Return results that do not match the criteria given in the search parameter.
filter object Return only those results that exactly match the given filter.

Accepts an array, where the keys are property names, and the values are either a single value or an array of values to match against.

Doesn't work for text fields.
limit integer Limit the number of records returned.
output query Object properties to be returned.

Default: extend.
preservekeys boolean Use IDs as keys in the resulting array.
search object Return results that match the given wildcard search (case-insensitive).

Accepts an array, where the keys are property names, and the values are strings to search for. If no additional options are given, this will perform a LIKE “%…%” search.

Works only for string and text fields.
searchByAny boolean If set to true return results that match any of the criteria given in the filter or search parameter instead of all of them.

Default: false.
searchWildcardsEnabled boolean If set to true enables the use of “*” as a wildcard character in the search parameter.

Default: false.
sortfield string/array Sort the result by the given properties. Refer to a specific API get method description for a list of properties that can be used for sorting. Macros are not expanded before sorting.

If no value is specified, data will be returned unsorted.
sortorder string/array Order of sorting. If an array is passed, each value will be matched to the corresponding property given in the sortfield parameter.

Possible values are:
ASC - (default) ascending.
DESC - descending.
startSearch boolean The search parameter will compare the beginning of fields, that is, perform a LIKE “…%” search instead.

Ignored if searchWildcardsEnabled is set to true.

Data types

The Zabbix API supports the following data types as input:

Type Description
boolean A boolean value, accepts either true or false.
flag The value is considered to be ​true​ if it is passed and not equal to ​null​ and ​false​ otherwise.
integer A whole number.
float A floating point number.
string A text string.
text A longer text string.
timestamp A Unix timestamp.
array An ordered sequence of values, that is, a plain array.
object An associative array.
query A value which defines, what data should be returned.

Can be defined as an array of property names to return only specific properties, or as one of the predefined values:
extend - returns all object properties.
count - returns the number of retrieved records, supported only by certain subselects.

Zabbix API always returns values as strings or arrays only.

License

This package is not developed by Zabbix LLC, is licensed under ISC and is provided "as is", without warranty of any kind, express or implied.

zabbix-rpc's People

Contributors

dikobrazsd avatar facuz avatar seggev319 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

zabbix-rpc's Issues

Getting "Method not found" on service.getsla()

Here is my code:

import Zabbix from 'zabbix-rpc'
const zabbixReq = new Zabbix('https://zabbix-monitor.local/')

//login here....

let result = await zabbixReq.service.getsla({
    serviceid: '22',
    period_from: 1640966400,
    period_to: 1643644800

})

I'm getting this 'Method not found.'

{
  error: {
    code: -32601,
    message: 'Method not found.',
    data: 'Incorrect method "service.getsla".',
    on_rpc: {
      jsonrpc: '2.0',
      method: 'service.getsla',
      params: [Object],
      id: 3,
      auth: 'd204e6xxxx'
    },
    url: 'https://monitor.ayp-group.com/api_jsonrpc.php'
  }
}

Im using Zabbix version: 6.2.6

Or am i using wrongly for the Service.prototype.getsla ?.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.