Zabbix: init_cpu_collector(): cannot make counterpath

Практические задачи

Задача 1

Заменить вычисляемый элемент данных предобработкой.

Условие: получаем с датчика температуру в градусах по Фаренгейту для хранения в градусах по Цельсию.

Раньше мы создали бы элемент данных, который собирает температуру в градусах по Фаренгейту. После этого — еще один элемент данных (вычисляемый), который по формуле преобразовывал бы градусы по Фаренгейту в градусы по Цельсию.

Проблемы:

  • Необходимо дублировать элементы данных и хранить все значения в базе.
  • Необходимо согласовать интервалы для «родительского» элемента данных, который вычисляется и используется в формуле, и для вычисляемого элемента данных. В противном случае вычисляемый элемент данных может перейти в неподдерживаемое состояние или посчитать предыдущее значение, что скажется на надежности результатов мониторинга.

Одним из решений был отказ от гибких интервалов проверок в пользу фиксированных интервалов, чтобы гарантированно вычислять вычисляемый элемент данных после элемента данных, получающего данные (в нашем случае — температура в градусах по Фаренгейту).

Но если, например, шаблон мы используем для проверки большого количества устройств, и проверка выполняется раз в 30 секунд, 29 секунд Zabbix «халтурит», а в последнюю секунду начинает проверки и вычисления. Это приводит к созданию очереди и влияет на производительность. Поэтому рекомендуется использовать фиксированные интервалы, только если это действительно необходимо.

В данной задаче оптимальное решение — предобработка из одной строки на JavaScript, которая конвертирует градусы по Фаренгейту в градусы по Цельсию:

Это быстро и просто, не нужно создавать лишних элементов данных и хранить по ним историю, а также можно использовать для проверок гибкие интервалы.

Но, если в гипотетической ситуации необходимо полученный элемент данных сложить, например, с какой-либо константой, определенной в макросе, необходимо учитывать, что параметр value раскрывается в строку. При операции сложения строк, две строки просто объединяются в одну.

Для получения результата математического действия, необходимо привести типы полученных значений в числовой формат. Для этого можно использовать функцию parseInt(), которая выдает целое число, функцию parseFloat(), которая выдает десятичную дробь, или функцию number, которая выдает целое число или десятичную дробь.

Задача 2

Получить время в секундах до окончания сертификата.

Условие: некий сервис выдает дату окончания сертификата в формате «Feb 12 12:33:56 2022 GMT».

В ECMAScript5 Date.parse() принимает дату в формате ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ). Необходимо привести к нему строку в формате MMM DD YYYY HH:mm:ss ZZ

Проблема: значение месяца выражено текстом, а не числом. Данные в таком формате не принимаются Duktape.

Пример решения:

  • В первую очередь объявляется переменная, которая принимает значение (весь скрипт — объявление переменных, которые перечислены через запятую).

  • В первой строке мы получаем дату в параметре value и разделяем ее пробелами методом split. Таким образом, мы получаем массив, где каждому элементу массива, начиная с индекса 0, соответствует один элемент даты до и после пробела. split(0) — месяц, split(1) — число, split(2) — строка с временем и т. д. После этого к каждому элементу даты можно обращаться по индексу в массиве.

Данные в полученном формате — количество секунд с 1970 года до какого-то момента в будущем. Использовать данные в полученном формате в триггерах практически невозможно, потому что Zabbix позволяет оперировать только макросами {Date} и {Time}, которые возвращают дату и время в понятном для пользователя формате.

В триггере можно указать выражение ‘last<‘ и набор цифр, который соответствует количеству секунд в периоде, на которое необходимо отреагировать, например, в неделях. Таким образом, триггер будет оповещать о том, что срок действия сертификата заканчивается через неделю.

ПРИМЕЧАНИЕ

Обратите внимание на использование parseInt() в функции return, чтобы сконвертировать дробное число, полученное в результате деления миллисекунд, в целое число. Также можно использовать parseFloat() и хранить дробные данные

Уведомления от Zabbix в Telegram

Сегодня подумал: “А почему бы не прикрутить telegram к zabbix?”… Немного погуглил… Но мне не понравились решения с установкой дополнительных программ/скриптов. Поэтому я решил реализовать это по своему: сделать бота и научить zabbix отправлять мне уведомление через него.

Шаг 1.

Для начала нужно создать бота в telegram. Для этого надо добавить в свой список контактов бота @BotFather, сказать ему “/start” и потом “/newbot”. BotFather сначала спросит, как назвать нового бота, а следующим сообщением нужно ввести имя бота.

В ответ BotFather пришлет token.

Вы можете либо создать своего бота либо использовать моего (все сообщения будут отправлены только вам, у меня к ним доступа нет). Звать этого бота @zabbix_notify_bot, а token у него “179320554:AAHI9AeBkptHgMIh5pVs31CRzGHV_9sG8bs”. Бота нужно добавить в свой список контактов. Шаг 2.

Чтобы можно было отправить себе сообщение, нужно знать свой Telegram ID. Для этого добавьте в свой список контактов бота @MyTelegramID_bot и скажите ему “/start”. В ответ получите свой Telegram ID. Скоро он пригодится.

Если оповещение нужно слать в группу, то надо этого бота добавить в группу и сказать “/start”. И далее использовать этот Telegram ID. Шаг 3.

Для отправки сообщений достаточно дать одну команду:

curl –header ‘Content-Type: application/json’ –request ‘POST’ –data ‘{“chat_id”:”_telegram_id_”,”text”:”_your_message_”}’ “https://api.telegram.org/bot_bot_token_/sendMessage”, где _telegram_id_ – ваш Telegram ID, полученный на шаге 2; _your_message_ – любое сообщение, которое бот отправит вам (для переноса строк можно использовать ); _bot_token_ – token бота, полученный на шаге 1.

Для отправки уведомлений из zabbix, я использую такой скрипт:

#!/bin/bash TOKEN=’179320554:AAHI9AeBkptHgMIh5pVs31CRzGHV_9sG8bs’ which curl &>/dev/null if ; then echo ‘FAIL: curl not found.’ && exit 1 ; fi if ; then echo ‘FAIL: Params not defined.’ && echo ‘Usage: zabbix-to-telegram-notify.sh TelegramID Subject Message’ && exit 1 ; fi CHAT_ID=”$1″ SUBJECT=”$2″ MESSAGE=”$3″ curl -s –header ‘Content-Type: application/json’ –request ‘POST’ –data “{“chat_id”:”${CHAT_ID}”,”text”:”${SUBJECT} ${MESSAGE}”}” “https://api.telegram.org/bot${TOKEN}/sendMessage” | grep -q ‘”ok”:false,’ if ; then exit 1 ; fiЕсли используется прокси, то нужно добавить соответствующие параметры для curl.Скрипт нужно положить в каталог, который указан в параметре “AlertScriptsPath” в конфиге zabbix сервера:# grep -i AlertScriptsPath /etc/zabbix/zabbix_server.conf | grep -vE ‘^#’ AlertScriptsPath=/etc/zabbix/alertscriptsИ сделать его исполняемым:chmod +x /etc/zabbix/alertscripts/zabbix-to-telegram-notify.shШаг 4. Теперь нужно настроить сам zabbix, чтобы он мог пользоваться скриптом. Для начала нужно создать новый способ оповещений. Я буду рассматривать для zabbix 3+, т.к. использую его. В 2.2-2.4 разница не большая.

Идем в Администрирование – Способы оповещений, жмем кнопку “Создать способ оповещений”. В поле “Имя” вводим название способа оповещения. В поле “Тип” нужно выбрать “Скрипт”.

SUBJECT} и {ALERT.MESSAGE}. Пример:

Шаг 5. Идем в Администрирование – Пользователи – выбираем своего пользователя – Оповещения – Добавить. В поле “Тип” выбираем только что созданный способ оповещения, например, Telegram Bot. В поле “Отправлять на” вводим свой Telegram ID, полученный на шаге 2.

Остальные поля заполняем на свое усмотрение. Шаг 6.

Идем в Настройка – Действия, в поле “Источник событий” выбираем “Триггеры” и жмем “Создать действие”. На закладках “Действие” и “Условие” заполняем поля по своему усмотрению.

Я в полях “Сообщение по умолчанию” и “Сообщение о восстановлении” указываю такое:

{HOST.NAME} :: {ITEM.NAME} :: {ITEM.VALUE} Status: {TRIGGER.STATUS} Host: {HOST.NAME} Item: {ITEM.NAME} Value: {ITEM.LASTVALUE} Key: {ITEM.KEY} Severity: {TRIGGER.SEVERITY} Trigger: {TRIGGER.NAME} Description: {TRIGGER.DESCRIPTION}Но это “на вкус и цвет”. На закладке “Операции” жмем “Новый”. Выбираем пользователя. В поле “Отправить только через” выбираем созданный на шаге 4 способ оповещения, например, Telegram Bot. Жмем “Добавить” и еще раз “Добавить”. На этом все. Теперь Zabbix должен присылать уведомления в Telegram.

Информация с сайта http://blog.angel2s2.ru/.

Немного опечатались

Иногда бывает так, что порты и все доступы настроены, агент установлен, ошибок в логах нет, но метрики не приходят или приходят не полностью. В самом Zabbix хост “горит зеленым” и непонятно, что вообще происходит.

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

Как только мы исправим в файле конфигурации параметр “Hostname” на нужный (в нашем случае это “SRV-SQL-01-VM”), то картина сразу же изменится. В списке появятся все диски сервера.

Данные могут появиться не сразу, т.к. правила обнаружения выполняются не так часто, как получение обычных метрик, но Вы можете запустить их вручную в настройках хоста.

Копипаст — зло! Будьте осторожны!

-Wextra

«Агрегатор» дополнительных предупреждений. Включает много интересного, чего нет в (как и в случае с , рассмотрены будут не все возможности).

Предупреждает о пустом теле условных выражений или цикла . Чаще всего это говорит об опечатке, меняющей логику программы:

См. также .

Предупреждает о «проваливании» в операторе :

Компилятор предполагает, что программист забыл , и не должен проваливаться:

В C++17 для обозначения явного намерения появился специальный атрибут — :

Предупреждает о том, что отдельные члены структуры не были проинициализированы. Скорее всего это просто забыли сделать:

Предупреждает о ненужном вызове в случаях, когда компилятор сам сделает всё, что нужно:

Предупреждает о сравнениях, которые всегда имеют один и тот же результат. Например, когда беззнаковое число проверяется на неотрицательность. Если программист делает такую проверку, то, видимо, предполагает, что число в теории может быть отрицательным, однако, это не так. Видимо, он где-то ошибся:

Предупреждает об операциях сдвига для отрицательных значений. Отрицательными могут быть только знаковые числа, а для них это некорректно:

Предупреждает о неиспользуемом параметре функции. Возможно, про него просто забыли, и в этом случае функция может работать некорректно.

В C++17 для явного выражения намерения существует атрибут :

Предупреждает о том, что в параметр функции было записано значение, но после этого он ни разу не использовался. Возможно, про него снова забыли:

Строим кластер на связке DRBD+Pacemaker+OpenVZ+NFS+Zabbix

Все это чудо будет крутиться на Debian 64

Сперва подготавливаем систему:

Создаем общую папку, куда будет монтироваться DRBD устройство и от куда по NFS клиенты будут забирать данные:

В роли OpenVZ я решил использовать Proxmox. Его вебку тупо не нужно допиливать)))

И добавляем вот эти строчки:

Теперь нам необходимо получить ключик:

Так как Proxmox поставляет свое ядро, то сперва ищем последнюю версию:

То же самое проделываем с вебкой:

Не забываем поправить груб:

Перезагружаемся в наше ядро 2.6.32-4-pve

Настраиваем наши сетевые интерфейсы:

nano /etc/network/interfaces

Proxmox установлен, вот основные команды:

В первом файле конфигурация кластера, во втором ключи доступа:

И приступаем к настройке:

Содержание моего drbd.conf:

Либо копируем drbd.conf на вторую ноду или делаем все тоже самое.

Затираем разделы, если есть необходимость:

На ноде, которую решили сделать мастером:

Наблюдаем за процессом любой из команд:

Останавливаем DRBD на обеих нодах, так как дальше им будет управлять Pacemaker:

И удаляем DRBD с автозагрузки по той же причине, что и чуть выше:

Устанавливаем сам Pacemaker:

Обязательно включаем Corosync:

Генерируем ключ. Для генерации необходимо жать на клавиши или двигать мышку.

Копируем с генерированный ключ на все ноды, которые будут в кластере:

(Не забываем про добавляемые ноды уже в готовый кластер)

На всех нодах в corosync.conf изменить нужные строки, как показано ниже:

nano /etc/corosync/corosync.conf

Запускаем Corosync на всех нодах

Может я и переборщил, но я банально шлепаю в начало в тот скрипт, который использую вот такие строчки, что бы не ругался на не установку:

Практически закончили….

Сейчас будем описывать что, где, когда и при каких условиях должно стартовать.

Сперва установим редактор по умолчанию, если нравиться vi можете пропустить это:

После выполнение следующей команды появится пустой файл:

Выходим и ждем секунд двадцать…

Снова выполняем эту команду:

И видим что то типо этого:

Если что то подобное, то все пока идет отлично….

Маленько забегу наперед. Возможно вы повнимательнее меня, но все же!

Нужно обратить внимание вот на такую примерно запись:

И если за место “started” стоит “stoped”, то ресурс не стартанет, соответственно.

Либо удаляем эту строчку либо меняем “stoped” на “started”

Опять же обращаем внимание на тонкость иначе вас не выпустит с конфига…

Не правильное описание ресурса:

Правильное описание ресурса:

Символ “” означает перевод строки и ожидание продолжения.

Если кому то принципиально дальнейший поряд вывода на мониторе ресурсов, то добавляем примитивы в нужной последовательности.

Далее пошли мои примитивы. Имена можно менять. Событиями варьировать))))

Вот эти строчки по идеи лишнии:

У меня просто DRBD пытался запуститься на этих нодах, на которых DRBD вообще не сконфигурирован.

…Небольшое отступление….

Устанавливаем NFS на ноды где поднят DRBD:

Правим этот файлик так же на обоих нодах, где установлен DRBD:

Единственно “НО”, для вновь добавляемой ноды придется создавать отдельный ресурс:

…где х – это номер ноды…

Если есть необходимость, вдруг что то не запустилось, перезагружаем Corosync:

На DRBD мастере выполняем:

Далее, использую основные команды Proxmox, настраиваем наш кластер:

…Тут мастером можно сделать любой компьютер – это не принципиально…

Кластер готов, настроен, и работает. Осталось настроить систему мониторинга…

Мне приглянулся Zabbix поэтому буду использовать его…

На сервере, а так как он на одном из DRBD устройств – на обоих DRBD устройств выполняем:

На других нодах достаточно:

Удаляем на DRBD устройствах с автозагрузки Zabbix сервер, так как стартовать будем через Pacemaker:

И останавливаем соответственно тоже на обоих DRBD устройствах:

Теперь самое сложное, для меня по крайней мере. Так как я не силен в написание скриптов, то пришлось прибегнуть к небольшой хитрости. Смотрим ниже:

А теперь опишем наш ресурс в Pacemaker:

А теперь маленький тюнинг:

Теперь переносим Zabbix на DRBD устройство:

ОБЯЗАТЕЛЬНО проделайте следующие команды на DRBD устройствах для удовлетворения симлинком в zabbix-frontend:

Следующие строчки вообще ни как не повлияли на процесс, но я их выполнил:

Осталось настроить уведомление о событиях:

Вроде бы все. Сервер готов. Осталось настроить агентов на всех серверах.

Так как у меня сервер может быть на одном из трех адресов, ну малоли общий IP не поднимется по каким то причинам, сделал вот такие манипуляции:

Следующий шаг можно пропустить. Я захотел даже агентов поместить в Pacemaker:

Ну и, соответственно, удаляем агента с автозагрузки:

Жду вопросов, дополнений и критики…

Все учту и добавлю в статью!

JavaScript для Zabbix

В апреле 2019 года был представлен Zabbix 4.2 с функцией предобработки на JavaScript. Многие загорелись идеей отказаться от написания скриптов, которые где-то забирают данные, переваривают их и предоставляют уже в понятном для Zabbix формате, а выполнять простые проверки, которые будут получать неготовые для хранения и обработки Zabbix данные, а потом обрабатывать этот поток данных с использованием средств Zabbix и JavaScript. В связке с низкоуровневым обнаружением и зависимыми элементами данных, которые появились в Zabbix 3.4, получилось достаточно гибкая концепция для сортировки и управления полученными данными.

В Zabbix 4.4, как логическое продолжение предобработки на JavaScript, появился новый способ оповещения — Webhook, который можно использовать для простой интеграции оповещений Zabbix со сторонними приложениями.

Игнорировать нельзя исправить

Большинство предупреждений — это не «бзик» компилятора, который можно просто проигнорировать. Предупреждение — это потенциальная ошибка. Предупреждение — это сигнал от компилятора о том, что написано одно, а требуется, возможно, что-то совершенно иное.

Поэтому программист должен помочь компилятору понять, как трактовать спорную ситуацию. То есть либо поправить свою ошибку, либо сообщить компилятору явно о том, что нужно верить программисту и делать именно то, что написано. Причём это поможет не только компилятору, но и человеку, который будет читать код. Лишний или пара скобок будут явно свидетельствовать о том, что имелось в виду именно то, что написано.

Далее я расскажу о наиболее важных на мой взгляд предупреждениях и покажу, какие ошибки можно отловить с их помощью.

Надеюсь, что данное не слишком занимательное чтиво поможет правильно поставить запятую в заголовке этого раздела.

Zabbix. Что нас ждет в Zabbix 2.2. Часть 1. Автоматическое обновление БД

Текущая актуальная версия Zabbix — 2.0. Для того, чтобы прийти к ней, потребовалось почти два с половиной года. Конечно ожидание было не напрасным — в Zabbix 2.0 появилось огромное количество новых возможностей. Согласно RoadMap Zabbix 2.2, он выйдет гораздо быстрее — дата релиза намечена на 1 мая. Давайте рассмотрим, что анонсируют разработчики в версии Zabbix 2.2.

Первое обновление, которое заметят и оценят все — автоматическое обновление схемы базы данных.

Раньше одним из самых сложных шагов обновления было обновление БД. Существовал SQL файл с патчем, который приходилось устанавливать вручную.

В Zabbix 2.2 данная проблема решена — теперь будет использоваться полностью автоматическое обновление БД.

Общая информация.

Обновление БД будет осуществляться сервером Zabbix. Каждый раз при старте будет проверяться текущая версия БД и, в случае необходимости, инициирован процесс обновления.

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

Давайте рассмотрим данный функционал более детально.

Сервер Zabbix.

Если обновление будет проходить с версии 2.0, в котором отсутствует эта таблица, сервер проверит существование поля server_check_interval в таблице config, которое появилось в версии 2.0.

Если поле присутствует, значит это Zabbix 2.0.

Обязательные и опциональные обновления.

В Zabbix есть обновления, которые затрагивают схему базы данных, а есть обновления индексов, позволяющие улучшить быстродействие. Первые будут относиться к обязательным, вторые — к опциональным.

С учетом того, что некоторые опциональные обновления могут привести к несовместимости с админкой в будущем, Zabbix сервер будет отслеживать их наряду с обязательными, что позволит обеспечить совместимость.

При запуске Zabbix сервера, он будет писать информацию об обновлениях в лог-файл. Если база данных не обновлена, будет запущен процесс обновления. По мере выполнения обновления, в лог-файл будет записываться текущий статус. Пример подобного лога ниже:

1234567891011121314151617 current database version (mandatory/optional): 02010008/02010008required mandatory version: 02010021starting automatic database upgradecompleted 7% of database upgradecompleted 15% of database upgradecompleted 23% of database upgradecompleted 30% of database upgradecompleted 38% of database upgradecompleted 46% of database upgradecompleted 53% of database upgradecompleted 61% of database upgradecompleted 69% of database upgradecompleted 76% of database upgradecompleted 84% of database upgradecompleted 92% of database upgradecompleted 100% of database upgradedatabase upgrade fully completed

Если процесс обновления потерпит неудачу на любом из шагов, сервер остановится, дав возможность исправить проблему. Когда он будет запущен снова, то продолжит с места останова на основании данных из dbversion.

Админка.

Админка Zabbix не будет выполнять никаких обновлений базы данных, а лишь проверять версию БД на совместимость. Проверка будет осуществляться только на предмет основных обновлений, информация об опциональных обновлениях будет игнорироваться.

Если версии будут несовместимы, вы получите подобное окно:

В приведенном примере версия админки слишком стара для базы данных.

JavaScript и Duktape

Почему были выбраны именно JavaScript и Duktape? Рассматривались различные варианты языков и движков:

  • Lua – Lua 5.1
  • Lua – LuaJIT
  • Javascript – Duktape
  • Javascript – JerryScript
  • Embedded Python
  • Embedded Perl

Основными критериями выбора были распространенность, простота интеграции движка в продукт, низкое потребление ресурсов и общая производительность движка, и безопасность внедрения кода на этом языке в мониторинг. По совокупности показателей победил JavaScript на движке Duktape.

Критерии выбора и performance testing

Особенности Duktape:

— Стандарт ECMAScript E5/E5.1
— Модули Zabbix для Duktape:

  • Zabbix.log() — позволяет вписать непосредственно в лог Zabbix Server сообщения с различным уровень детализации, что обеспечивает возможность сопоставлять ошибки, например, в Webhook с состоянием сервера.
  • CurlHttpRequest() — позволяет делать HTTP-запросы в сеть, на чем основано применение Webhook.
  • atob() и btoa() — позволяет кодировать и декодировать строки в формат Base64.

ПРИМЕЧАНИЕ. Duktape соответствует стандартам ACME. В Zabbix используется версия скрипта 2015 года. Последующие изменения незначительны, поэтому их можно игнорировать.

Zabbix-Proxy

ProxyMode=0
Server=IP do zabbix server (master)
ServerPort=10051
Hostname=Nome do proxy que foi criado no Zabbix server, tem quer ser igual
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=100
DebugLevel=3
PidFile=/var/log/zabbix/zabbix_proxy.pid
DBName=/var/lib/sqlite/zabbix.db # SQLite não vai pedir usuário ou senha
DBSocket=/var/lib/mysql/mysql.sock
ProxyLocalBuffer=1
ProxyOfflineBuffer=1
HeartbeatFrequency=60
ConfigFrequency=60
DataSenderFrequency=60
StartPollers=65
StartPollersUnreachable=15
StartPingers=60
StartDiscoverers=35
StartHTTPPollers=5
HousekeepingFrequency=1
CacheSize=20M
StartDBSyncers=8
HistoryCacheSize=20M
HistoryTextCacheSize=32M
Timeout=15
UnreachablePeriod=45
UnavailableDelay=60
UnreachableDelay=15
FpingLocation=/usr/sbin/fping
LogSlowQueries=2
StartIPMIPollers=0
StartJavaPollers=0
StartVMwareCollectors=0
VMwareFrequency=60
StartSNMPTrapper=0 

взято тут

Установка и настройка

— Система Debian Jessie (8)

устанавливаем postgresql, читать тут PostgreSQL

устанавливаем необходимые пакеты:

apt-key adv --keyserver keys.gnupg.net --recv-keys D13D58E479EA5ED4
apt-get update
apt-get install zabbix-agent zabbix-frontend-php zabbix-proxy-pgsql zabbix-server-pgsql php-fpm nginx

создаем администратора базы zabbix

CREATE USER zabbixadmin WITH PASSWORD 'mypassword';

создаем базу данных для zabbix

CREATE DATABASE "zabbix"
 WITH OWNER "zabbixadmin"
 ENCODING 'UTF8'
 LC_COLLATE = 'ru_RU.UTF-8'
 LC_CTYPE = 'ru_RU.UTF-8';

даем права на базу администратору

GRANT ALL PRIVILEGES ON DATABASE "zabbix" to zabbixadmin;

теперь необходимо в эту базу загрузить шаблоны и схему (для postgresql)

zcat /usr/share/zabbix-server-pgsql/{schema,images,data}.sql.gz|psql -h 127.0.0.1 zabbix zabbixadmin

{!} — для версии 3.4:

zcat /usr/share/doc/zabbix-server-pgsql/create.sql.gz|psql -h 127.0.0.1 zabbix zabbixadmin

настраиваем php-fpm

cat /etc/php5/fpm/pool.d/www.conf
....
;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000

....

cat /etc/php5/fpm/php.ini
....
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
....
date.timezone = Europe/Moscow
....
max_execution_time = 300
....
post_max_size = 16M
....
always_populate_raw_post_data = -1
....

(!) — возможно zabbix при первом запуске еще что-то попросит, измените как будет указано.

nginx — пример наcтройки для zabbix:

 server {
    listen      10.0.1.40:88;
    server_name zabbix;
    root /home/www/zabbix;
    location / {
        index   index.html index.php;
    }

    location ~* \.(gif|jpg|png)$ {
        expires 30d;
    }

    location ~ \.php$ {
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME
                      $document_root$fastcgi_script_name;
        include       fastcgi_params;
    } 
}
  • После успешного прохождения первичных настроек Zabbix, сохраните файл настроек в /etc/zabbix/web/zabbix.conf.php
  • При первичной регистрации login:Admin password:zabbix

Заключение

Резюмируя, для компилятора GCC (Clang кое-что из этого не умеет, к сожалению) я рекомендую включать следующий минимальный набор флагов, по необходимости дополняя его более сложными диагностиками.

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

Любите ваш компилятор и помогайте ему помогать вам писать программы.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: