Ad Widget

Collapse

Элемент данных - ? Запросы данных из сторон&am

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Incher
    Member
    • Sep 2012
    • 38

    #1

    Элемент данных - ? Запросы данных из сторон&am

    Возможно, это несколько странный вопрос, но хотелось бы четко понимать, что из себя все-таки представляет элемент данных?

    (Если оперировать терминами ООП)
    Элемент данных = активный объект (сущность которая имеет свойства (хранит в себе данные) + имеет свое поведние (методы)
    или
    Элемент данных = пассивный элемент, хранящий только данные, за наполнение отвечает другой объектт (какой?)
    или
    Элемент данных = активный объект-интерфейс, не хранящий ничего, но отвечающий за опрос/сбор инфы и транслирующий полученные/обработанные результаты куда нужно (например в таблицу TRENDS)

    В документации с одной стороны говорится, что "Элементы данных являются теми, кто собирает данные с узла сети."
    (https://www.zabbix.com/documentation...l/config/items), а с другой - что " элемент данных - конкретная часть данных, которую вы хотите
    получать от узла сети, метрические данные" (https://www.zabbix.com/documentation...anual/concepts).
    То есть, с одной стороны это какой-то активный компонент системы (утилита, скрипт и т.д.), который запрашивает данные с хостов, а с другой стороны -
    это и есть сами данные, то есть пассивный объект - считанное с хоста значение какой-либо переменной или ячейки в бд, например.
    Прошу помочь прояснить данный момент.

    Изначально вопрос возник в связи с необходимостью решить следующую задачу:
    Есть MySQL-таблица (на внешнем хосте, хост подключенк к мониторингу через заббикс-агент), накапливающая данные, есть опредленн порог (записей в час) считающейся нормой (например 100 записей в час - норма), нужно сканировать ее каждый час и складывать полученное значение в TRENDS (для графиков)
    Если за прошедший час число новых записей - меньше нормы, нужно бить тревогу в виде емейлов ответственным лицам (проверять работу систем, трясти разработчиков (своих и патрнерских))

    Текущий порог вычисляется простейшим sql-запросом: select count(*) from table_name where date_time between '...' and '...';

    Я пошла следующим путем:
    В качестве эксперимента вручную в таблице items для внешнего хоста создала новый элемент данных со следующими параметрами:
    +--------+-----------------+---------+
    | itemid | name | key_ |
    +--------+-----------------+---------+ . . .
    | 23500 | user_db_cheks | user_db |
    +--------+-----------------+---------+

    Затем в TRENDS создала для него несколько значений значений:
    +--------+---------------+-----+------------+-----------+-------------+
    | itemid | clock | num | value_min | value_avg | value_max |
    +--------+---------------+-----+------------+-----------+-------------+
    | 23500 | 1354525200 | 1 | 3.0000 | 3.0000 | 3.0000 |
    | 23500 | 1354528800 | 1 | 5.0000 | 5.0000 | 5.0000 |
    | 23500 | 1355994000 | 1 | 3.0000 | 3.0000 | 3.0000 |
    +--------+---------------+-----+------------+-----------+-------------+
    И проверила в веб-интерфейсе: данный элемент отображается в списке элементов и по этим точкам строится график. Но необходимо автоматизировать процесс - чтобы элемент данных опрашивал стороннюю таблицу и закидывал собранные данные в TRENDS каждый час.

    Непонятки:
    1) Элеметн данных может сделать сей sql-запрос? Не могу найти ничего подходящего в веб-форме.
    2) Как заставить этот элемент самого вставлять полученные данные в TRENDS?

    Честно говоря я сразу затруднилась какой собственно тип элемента данных мне подходит - поэтому описала задачу более-менее подробно.
  • dima_dm
    Senior Member
    • Dec 2009
    • 2697

    #2
    Ваша задача решается очень просто.
    1) На удалённом сервере ставите Zabbix_agent
    2) В конфигурации Zabbix_agent
    UserParameter=mysql.counter,/path/script.sh
    /path/script.sh - это скрипт, который сделает запрос к MySQL и вычислит всё что вам нужно. Вернёт в стандартный вывод число новых записей в таблице.
    mysql.counter - это имя вашего UserParameter
    3) На zabbix_server создаёте item mysql.counter типа Zabbix_agent.
    По поводу первого вопроса,
    у item есть тип, который определяет как в этот item будут поступать данные (метод). item может быть как активным так и пассивным, в зависимости от типа.

    > 2) Как заставить этот элемент самого вставлять полученные данные в TRENDS?
    После создания item таблицы history и TRENDS будут заполняться автоматически, и данные будут храниться столько времени, сколько вы укажите в настройке Item.
    Last edited by dima_dm; 18-01-2013, 09:13.

    Comment

    • Incher
      Member
      • Sep 2012
      • 38

      #3
      Спасибо, работет. Еще есть вопрос, у нас один из наблюдаемых хостов находится в другом часовом поясе, можно ли сделать так,чтобы данные именно с этого хоста собирались (и графики строились) по его местному времени, а не по времени сервера?

      Comment

      • Incher
        Member
        • Sep 2012
        • 38

        #4
        Originally posted by incher
        Спасибо, работет. Еще есть вопрос, у нас один из наблюдаемых хостов находится в другом часовом поясе, можно ли сделать так,чтобы данные именно с этого хоста собирались (и графики строились) по его местному времени, а не по времени сервера?
        в связи с этой же задачей хотелось бы уточнить,
        можно ли в веб-интерфейсе "подогнать" время срабатывания итема? я создала итем в 9:36, интервал установила 3600, следовательно, первое значение по нему получила в 10:36.
        Было бы удобнее получать данные в n часов 00 минут. Для этого попробовала удалить итем и создать заново в удобное для себя время, но он все равно запрашивает данные в 36 минут каждого часа...

        Comment

        • dima_dm
          Senior Member
          • Dec 2009
          • 2697

          #5
          Originally posted by Incher
          в связи с этой же задачей хотелось бы уточнить,
          можно ли в веб-интерфейсе "подогнать" время срабатывания итема? я создала итем в 9:36, интервал установила 3600, следовательно, первое значение по нему получила в 10:36.
          Было бы удобнее получать данные в n часов 00 минут. Для этого попробовала удалить итем и создать заново в удобное для себя время, но он все равно запрашивает данные в 36 минут каждого часа...
          Время сбора данных можно задать только через интервалы в item.
          2 раза в день к примеру:
          60 sec at 1-7,02:00-02:01
          60 sec at 1-7,14:00-14:01
          Интервал обновления (секунды) =0

          Comment

          • Incher
            Member
            • Sep 2012
            • 38

            #6
            Понятно, спасибо.
            А как все-таки быть с этим вопросом:
            у нас один из наблюдаемых хостов находится в другом часовом поясе, можно ли сделать так,чтобы данные именно с этого хоста собирались (и графики строились) по его местному времени, а не по времени сервера?

            Comment

            • dima_dm
              Senior Member
              • Dec 2009
              • 2697

              #7
              Originally posted by Incher
              Спасибо, работет. Еще есть вопрос, у нас один из наблюдаемых хостов находится в другом часовом поясе, можно ли сделать так,чтобы данные именно с этого хоста собирались (и графики строились) по его местному времени, а не по времени сервера?
              Стандартной фичи такой нет. Если модифицировать php скрипты, думаю можно. Время в базу пишется в unixtime, а вывод данных в соответствии с часовым поясом делает php.
              Можно поставить ещё один web интерфейс zabbix и в нём в php.ini переопределить часовой пояс.

              Comment

              • Incher
                Member
                • Sep 2012
                • 38

                #8
                Originally posted by dima_dm
                Время сбора данных можно задать только через интервалы в item.
                2 раза в день к примеру:
                60 sec at 1-7,02:00-02:01
                60 sec at 1-7,14:00-14:01
                Интервал обновления (секунды) =0
                Мне необходим сбор данных раз в час, поэтому я создаю 24 таких интервала, но после добавления первых шести интервалов, седьмой не добавляется. Можно ли как-то обойти это ограничение?

                Comment

                • Incher
                  Member
                  • Sep 2012
                  • 38

                  #9
                  Еще такойвопрос, если, например, нужно из бд получить 4 поля и закинуть их в пользовательский элемент данных, сможет ли он возвращать одно временно 4 числовых значения, или если сохранить их в текстовом фермате одной строкой, то можно ли ее будет распарсить для получениея отдельных чисел и дальнейшего построения графиков?

                  Comment

                  • dima_dm
                    Senior Member
                    • Dec 2009
                    • 2697

                    #10
                    Originally posted by Incher
                    Еще такойвопрос, если, например, нужно из бд получить 4 поля и закинуть их в пользовательский элемент данных, сможет ли он возвращать одно временно 4 числовых значения, или если сохранить их в текстовом фермате одной строкой, то можно ли ее будет распарсить для получениея отдельных чисел и дальнейшего построения графиков?
                    Нет. Должно быть одно значение, преобразование строк в число невозможно.
                    Можно использовать zabbix_sender
                    http://www.zabbix.com/documentation/.../zabbix_sender
                    Лучше использовать zabbix_sender с ключём -i и -T посылать сразу много значений за один вызов.
                    Это решение подходит и для
                    Originally posted by Incher
                    Мне необходим сбор данных раз в час, поэтому я создаю 24 таких интервала, но после добавления первых шести интервалов, седьмой не добавляется. Можно ли как-то обойти это ограничение?
                    Т.е. ставите ваш скрипт в cron на целевой машине, а результаты отправляете zabbix_sender. Item должен иметь тип zabbix траппер

                    Comment

                    • Incher
                      Member
                      • Sep 2012
                      • 38

                      #11
                      Originally posted by dima_dm
                      Лучше использовать zabbix_sender с ключём -i и -T посылать сразу много значений за один вызов.
                      То есть, например, я пишу скрипт, в котором делается запрос к бд mysql, возвращающий несколько числовых значений, а затем его результаты можно напрямую передавать в zabbix_sender, или нужно их записывать в файл, а потом передавать zabbix_sender'у путь к нему в параметре -i?

                      Comment

                      • Incher
                        Member
                        • Sep 2012
                        • 38

                        #12
                        И еще, sender ведь не сможет передавать несколько значений в один ключ (эти значения берутся из разных полей бд и имеют разный смысл)? То есть мне все равно придется создавать отдельный ключ для каждого значения?

                        Comment

                        • dima_dm
                          Senior Member
                          • Dec 2009
                          • 2697

                          #13
                          1) Да, данные нужно будет записать в файл
                          2) zabbix_sender-у все равно куда и что передавать, в частности он может и N значений передать в один ключ, достаточно просто повторить строку c данными во входном файле N раз.
                          Пример:
                          Code:
                          <hostname> <key> <timestamp> <value>
                          host mykey timestamp1 1
                          host mykey timestamp2 2
                          host mykey timestamp3 15
                          и т.д.
                          Другое дело, что в Item может храниться только одна сущность. Для каждой логической сущности нужно создать свой Item. В противном случае, вы не сможите определить какое значение, состояние какой сущности отражает и его логический смысл.

                          Comment

                          • Incher
                            Member
                            • Sep 2012
                            • 38

                            #14
                            Понятно, спасибо.

                            Предположим, я собрала данные из пользовательских БД, по ним строятся графики. Теперь ставится задача выводить под графиками статистику по ним в виде таблицы, для этого, я так понимаю, без модификации php-кода не обойтись. Если это возможно, то какие файлы веб-интерфейса нужно изменить (или в какие из них включить свой php-скрипт, который будет строить эти таблицы)?

                            Comment

                            • dima_dm
                              Senior Member
                              • Dec 2009
                              • 2697

                              #15
                              Originally posted by Incher
                              Понятно, спасибо.

                              Предположим, я собрала данные из пользовательских БД, по ним строятся графики. Теперь ставится задача выводить под графиками статистику по ним в виде таблицы, для этого, я так понимаю, без модификации php-кода не обойтись. Если это возможно, то какие файлы веб-интерфейса нужно изменить (или в какие из них включить свой php-скрипт, который будет строить эти таблицы)?
                              Лучше воспользоваться отчётами, а не модифицировать системные скрипты построения графиков.
                              В системе уже есть некоторые отчеты, посмотреть файлы отчетов можно в /usr/local/www/zabbix/report1.php - report6.php
                              проанализировав принцип построения отчетов можно нарисовать свои.
                              Графики строит скрипт chart2.php
                              <img src="http://zabbix/zabbix/chart2.php?graphid=247&width=640&period=86400">
                              generates a graph whose id is 247, 640 pixels wide for last 24h (86400s).

                              Comment

                              Working...