LINUX.ORG.RU
решено ФорумAdmin

Zabbix 2.0.6 показать все графики


1

2

Доброе время суток. Хотелось бы как то в заббиксе реализовать вывод всех графиков определенного хоста. Есть хост, там куча интерфейсов, туннелей, которые динамически добавляются удаляются и с комплексным экраном не охота заморачиваться. Это постоянно его надо редактировать, что совсем не есть хорошо... Нашел патчи для более ранних версий, но вот по 2.0.6 тишина. Вроде нужная вещь, странно что она не реализована по умолчанию...


Создайте FR в bugzilla, вполне вероятно, что реализуют.

blackst0ne ★★★★★
()

напиши на python/ruby/php скрипт, который будет через zabbix_api добавлять/удалять графики на комплексный экран узла. делов на 15 минут.

Turbid ★★★★★
()
Ответ на: комментарий от Turbid

Будь реалистом. Пару часов только на поиск, установку и проверку через какой-нибудь helloworld ;)

Потом ещё полчаса на чтение документации по API и реализацию собственно скрипта.

Но да, скорее всего это единственный вариант.

Выбор модулей для разных ЯП: https://zabbix.org/wiki/Docs/api/libraries

Документация по API: https://www.zabbix.com/documentation/2.0/manual/appendix/api/host/create

router ★★★★★
()
Последнее исправление: router (всего исправлений: 1)

Вот собственно решение, решил не париться с апи :). 22 айди готового коплексного экрана, 10085 айди сервера для которого применяем данную схему.

<?php


$hostname = 'localhost';
$username = 'root';
$password = '';

$db = mysql_connect($hostname, $username, $password)
        or die('connect to database failed');

mysql_select_db('zabbix')   or die('db not found');
mysql_query("delete from screens_items where screenid='22'");
$result = mysql_query("select screenitemid from screens_items order by screenitemid desc limit 1");
if (mysql_num_rows($result) == 1){
        $row = mysql_fetch_assoc($result);
        $screenitemid = $row['screenitemid']+1;
}else{
        $screenitemid = 1;
}

$result = mysql_query("SELECT DISTINCT g.graphid FROM graphs g,graphs_items gi,items i WHERE i.hostid='10085' AND gi.graphid=g.graphid AND i.


if (mysql_num_rows($result) > 0) {
        $count = 0;
        while ($row = mysql_fetch_assoc($result)) {
                $count++;
                mysql_query("insert into screens_items set screenitemid='$screenitemid',screenid='22',resourcetype='0',resourceid='$row[graph
                $screenitemid++;
        }
        mysql_query("update screens set vsize='$count' where screenid='22'");
}

Spank
() автор топика
Ответ на: комментарий от Spank

Оффтоп. Я бы не лез в БД самостоятельно, если есть API. У заббикса база и так самое слабое место, особенно при синхронизации между нодами.

router ★★★★★
()
Ответ на: комментарий от router

Я на пыхе чет толковых примеров не нашел, да и вариант доступа к апи через сайт как то не очень хороший. Телодвижений слишком много запросов и прочего. Может я конечно что то не то смотрел... А тут грубо говоря запросы простые, врятли наврежу системе, к тому же синхронизации нету и сетка не провайдерская все таки... Не плохо бы плагины туда. В новых версиях надюсь сделают автодобавление в экраны или на худой конец просмотр всех графиков в хосте, вапще не понимаю почему они это не сделали...

Spank
() автор топика
Ответ на: комментарий от Spank

Наткнулся на косяк не большой :)

<?php


$hostname = 'localhost';
$username = 'root';
$password = '';

$db = mysql_connect($hostname, $username, $password)
        or die('connect to database failed');

mysql_select_db('zabbix')   or die('db not found');
mysql_query("delete from screens_items where screenid='22'");
$result = mysql_query("select screenitemid from screens_items order by screenitemid desc limit 1");
if (mysql_num_rows($result) == 1){
        $row = mysql_fetch_assoc($result);
        $screenitemid = $row['screenitemid'];
}else{  
        $screenitemid = 0;
}

$result = mysql_query("SELECT DISTINCT g.graphid FROM graphs g,graphs_items gi,items i WHERE i.hostid='10085' AND gi.graphid=g.graphid AND i.i


if (mysql_num_rows($result) > 0) {
        $count = 0;
        while ($row = mysql_fetch_assoc($result)) {
                $count++;
                $screenitemid++;
                mysql_query("insert into screens_items set screenitemid='$screenitemid',screenid='22',resourcetype='0',resourceid='$row[graphi
        }
        mysql_query("update screens set vsize='$count' where screenid='22'");
        mysql_query("update ids set nextid='$screenitemid' WHERE nodeid=0 AND table_name='screens_items' AND field_name='screenitemid';");
}

Spank
() автор топика
Ответ на: комментарий от router

Ты прав надо было бы изучить. Буду если что еще делать наверное придется разобратья :). Просто чет я там не вник с первого раза. С примером то ясно, а вот что дальше примера...

Spank
() автор топика
Ответ на: комментарий от Spank

А дальше - справочник по API

Я обычно, чтобы было понятно что происходит, вывожу на консоль текст запроса и ответа.

#!/usr/bin/perl

use strict;

use Zabbix::API;
use Data::Dumper;

my $zabbix = Zabbix::API->new(server => "http://$address/zabbix/api_jsonrpc.php",
            verbosity => 0);
eval { $zabbix->login(
    user => 'user',
    password => 'password',
) };

my $params = {
   [...]
}

    printf "request: %s\n", Dumper ($params);
    printf "response: %s\n", Dumper ( $zabbix->query(
        "method" => $method,

        "params" => $params,
    ) ), "\n";
router ★★★★★
()
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от router

Я обычно, чтобы было понятно что происходит, вывожу на консоль текст запроса и ответа.

Там же режим отладки есть...

Turbid ★★★★★
()
17 марта 2014 г.

Все графики на одной странице и в поупменю добавлена ссылка на все графики.

[root@zabbix zabbix]# diff ./include/func.inc.php /home/abiryukov/backup/backup131213/zabbix/include/func.inc.php 2645d2644 < 'hasGraphs' => true,

[root@zabbix zabbix]# diff ./include/views/monitoring.charts.php /home/abiryukov/backup/backup131213/zabbix/include/views/monitoring.charts.php 71,98d70 < else if ($this->data['pageFilter']->hostid != 0) { < < $options = array( < 'output' => array('graphid', 'name', 'graphtype'), < 'hostids' => $this->data['pageFilter']->hostid < ); < $graphs = API::Graph()->get($options); < < $chartTable = new CTable(_('No graphs.'), 'maxwidth'); < foreach ($graphs as $graph) { < $graphid = $graph['graphid']; < $screen = CScreenBuilder::getScreen(array( < 'resourcetype' => SCREEN_RESOURCE_CHART, < 'graphid' => $graph['graphid'], < 'profileIdx' => 'web.screens', < 'profileIdx2' => $graph['graphid'], < 'dataId' => 'graph_full_' . $graph['graphid'] < )); < $chartTable->addRow($screen->get()); < } < < $chartsWidget->addItem($chartTable); < < CScreenBuilder::insertScreenStandardJs(array( < 'timeline' => $screen->timeline, < 'profileIdx' => $screen->profileIdx < )); < }

[root@zabbix zabbix]# diff ./include/classes/screens/CScreenChart.php /home/abiryukov/backup/backup131213/zabbix/include/classes/screens/CScreenChart.php 39c39 < ---


41d40 < $this->dataId = isset($options['dataId']) ? $options['dataId'] : null; 50,53c49 < # $this->dataId = 'graph_full'; < if (empty($this->dataId)) { < $this->dataId = 'graph_full'; < } ---

$this->dataId = 'graph_full';

[root@zabbix zabbix]# diff ./js/flickerfreescreen.js /home/abiryukov/backup/backup131213/zabbix/js/flickerfreescreen.js 302,303c302 < //if (bufferImg.data('timestamp') > screen.timestamp) { < if (bufferImg.data('timestamp')+1000 > screen.timestamp) { ---

if (bufferImg.data('timestamp') > screen.timestamp) {

[root@zabbix zabbix]# diff ./js/menupopup.js /home/abiryukov/backup/backup131213/zabbix/js/menupopup.js 86,92d85 < // graphs < if (options.hasGraphs) { < gotos[gotos.length] = { < label: 'Host all graphs', < url: new Curl('charts.php?hostid=' + options.hostid).getUrl() < }; < }

anonymous
()
Ответ на: комментарий от anonymous

Прошу прощения за форматирования в пред. посте.

Все графики на одной странице и в поупменю добавлена ссылка на все графики.

[root@zabbix zabbix]# diff ./include/func.inc.php /home/abiryukov/backup/backup131213/zabbix/include/func.inc.php
2645d2644
< 'hasGraphs' => true,


[root@zabbix zabbix]# diff ./include/views/monitoring.charts.php /home/abiryukov/backup/backup131213/zabbix/include/views/monitoring.charts.php
71,98d70
< else if ($this->data['pageFilter']->hostid != 0) {
<
< $options = array(
< 'output' => array('graphid', 'name', 'graphtype'),
< 'hostids' => $this->data['pageFilter']->hostid
< );
< $graphs = API::Graph()->get($options);
<
< $chartTable = new CTable(_('No graphs.'), 'maxwidth');
< foreach ($graphs as $graph) {
< $graphid = $graph['graphid'];
< $screen = CScreenBuilder::getScreen(array(
< 'resourcetype' => SCREEN_RESOURCE_CHART,
< 'graphid' => $graph['graphid'],
< 'profileIdx' => 'web.screens',
< 'profileIdx2' => $graph['graphid'],
< 'dataId' => 'graph_full_' . $graph['graphid']
< ));
< $chartTable->addRow($screen->get());
< }
<
< $chartsWidget->addItem($chartTable);
<
< CScreenBuilder::insertScreenStandardJs(array(
< 'timeline' => $screen->timeline,
< 'profileIdx' => $screen->profileIdx
< ));
< }


[root@zabbix zabbix]# diff ./include/classes/screens/CScreenChart.php /home/abiryukov/backup/backup131213/zabbix/include/classes/screens/CScreenChart.php
39c39
<
---
>
41d40
< $this->dataId = isset($options['dataId']) ? $options['dataId'] : null;
50,53c49
< #	$this->dataId = 'graph_full';
< if (empty($this->dataId)) {
< $this->dataId = 'graph_full';
< }
---
> $this->dataId = 'graph_full';


[root@zabbix zabbix]# diff ./js/flickerfreescreen.js /home/abiryukov/backup/backup131213/zabbix/js/flickerfreescreen.js
302,303c302
< //if (bufferImg.data('timestamp') > screen.timestamp) {
< if (bufferImg.data('timestamp')+1000 > screen.timestamp) {
---
> if (bufferImg.data('timestamp') > screen.timestamp) {

[root@zabbix zabbix]# diff ./js/menupopup.js /home/abiryukov/backup/backup131213/zabbix/js/menupopup.js
86,92d85
< // graphs
< if (options.hasGraphs) {
< gotos[gotos.length] = {
< label: 'Host all graphs',
< url: new Curl('charts.php?hostid=' + options.hostid).getUrl()
< };
< }

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.