Info
Content

zabbixsetup

Делать на ubuntu 14, предварительно установив данные пакеты:
apache2
php5-pgsql(!!!!!)
libapache2-mod-php5
add-apt-repository
postgresql-9.5
php5-gd
php-net-socket
postgresql-server-dev-9.5
snmp
libiksemel-dev libiksemel-utils libiksemel3
libghc-network-protocol-xmpp-dev
libcurl3
php5-curl 
curl
fping
libcurl3-gnutls 
libcurl4-openssl-dev
libcurl4-gnutls-dev 
libsnmp-dev
wireshark
Установка:
    1)скачать zabbix 1.8 c офсайта
    2)tar -xvf zabbix*.tar.gz
    3)./configure --enable-server --with-pgsql --prefix=/usr/local/ 
    4)sudo make
    5)sudo make install
    6)sudo groupadd zabbix
    7)sudo useradd -g zabbix zabbix(+добавить в sudo zabix)
    8)sudo apt-get install postgresql-server-dev-9.5
    9)/etc/init.d/postgresql start
    10)cd /etc/postgresql/9.5/main/
        #listen_addresses = 'localhost' -> listen_addresses = 'localhost' в postgresql.conf
    11)sudo psql -U postgres
    12)create database zabbix
    13)создать юзера zabbix и сделать его владельцем базы zabbix
    14)залить дамп в базу заббикса из папки сорсов create/schema(уч) + сreate/data
sudo cat ~/zabbix-1.8.22/create/schema/postgresql.sql | psql -U zabbix zabbix
sudo cat ~/zabbix-1.8.22/create/data/images_pgsql.sql | psql -U zabbix zabbix
Настройка:
    *1)sudo vim /etc/services
        ```
        zabbix-agentd    10050/tcp  Zabbix Agent
        zabbix-agentd    10050/udp  Zabbix Agent
        zabbix-trapper  10051/tcp  Zabbix Trappercd 
        zabbix-trapper  10051/udp  Zabbix Trapper 
        ```
    *2)sudo vim /etc/inetd.conf:
        zabbix_agent stream tcp nowait.3600 zabbix /opt/zabbix/bin/zabbix_agent
    3)sudo mkdir /etc/zabbix 
          sudo chown -R zabbix /etc/zabbix
    4)из misc/conf в папке сорсов скопировать server конфиг в /etc/zabbix; misc/init.d/debian/zabbux-server.conf  в /etc/init.d/zabbix-server(убрать расширение)(chmod)
    Брать из папки debian потому что там норм скрипты, в папке ubuntu лежит какое то говно
    
    5)отредактировать конфиг
        /var/log/zabbix/$name.log(chown)
        pid */$name.pid(chown) (в документации написано использовать папку /var/run, но при этом после перезагрузки все файлы будут затираться, поэтому лучше использовать другую)   
        host:localhost
        user:zabbix
        pass:zabbix
        db:zabbix
    6)cd /usr/local/sbin | ./zabbix_server(перед этим проверить, что все файлы доступны для чтения/записи/исполнения пользователю zabbix)
    7)в логах должна была появиться инфа о запуске 
    настройка веб-интерфейса(так проще убедиться, что все работает, дальнейшая настройка через терминал и psql):
    1)sudo a2enmod php5
    2)cp ~/zabbix-*/frontend/php/* /var/www/html
cp -a . /var/www/html
    3)sudo service apache2 start
    4)установить директивы в /etc/apache2/apache2.conf
        ```
        php_value max_execution_time 300
        php_value memory_limit 128M
        php_value post_max_size 16M
        php_value upload_max_filesize 2M
        php_value max_input_time 300
        php_value always_populate_raw_post_data -1
        php_value date.timezone Europe/Moscow
        ```
Создаем в db хост:
    INSERT INTO hosts (hostid,host,ip) VALUES ('90001','MyLocalhost','127.0.0.1');
Связываем его с группой:
    insert into hosts_groups (hostgroupid,hostid,groupid) values ('59', '90001', '11');
    hostgroupid - id записи в таблице hosts_groups
    groupid - id группы, в данном случае группу сделал сам заранее
    
    Если этого не сделать то в веб-морде отображаться не будет.
Связываем хост с шаблоном:   ОПЦИОНАЛЬНО
    insert into hosts_templates (hosttemplateid, hostid, templateid) values ('1', '90002', '10001') 
    СВЯЗЫВАЕТ НО АЙТЕМЫ НЕ КОПИРУЕТ.
Создаем айтемы(https://www.zabbix.com/documentation/1.8/api/item):
    -insert into items (itemid, hostid, description, key_, type, delay) values ('23004','90001','test.sh{100}', 'test.sh', '10', '1');(экстернал чек)
    срипт должен лежать на заббикс-сервере в папке '/etc/zabbix/externalscripts', должен быть rwx для zabbix, owner zabbix(данный скрипт выводит число 100)
    #!/bin/bash
    echo '100'
    description - имя
    type - в данном случае external check
    key_ - путь от папки /etc/zabbix/externalscripst
    delay адержка между обновлениями значения
    -insert into items (itemid, type, description, key_, value_type,hostid) VALUES ('23005','2','trappertest','trap','3','90001');(trapper)
    value_type - 2 zabbix trapper
               - 10 external check
Создаем триггеры:
    -insert into triggers (triggerid, expression, description) values ('23004','{23004}=100', 'external item not zero');
    expression -выражение триггера
    -insert into triggers (triggerid, expression, description) values ('23005','{23005}<10','trappertesterr');
Создаем функцию:
    -insert into functions (itemid, functionid, function, triggerid ) VALUES ('23004','23004','last','23004');экстернал чек
    -insert into functions (itemid, functionid, function, triggerid) values ('23005','23005','last','23005');траппер
Добавить зависимость триггеров: 
    -INSERT INTO trigger_depends (triggerdepid, triggerid_down, triggerid_up) VALUES ('1', '23004', '23005'); триггер 23004 будет зависеть от 23005
т.е. пока 23005 в проблеме, 23004 не будет срабатывать, даже если для него выполнено триггерное выражение. Если 23004 в ОК, а 23005 сработал, то 23005 перейдет в проблему  
Устанавливаем zabbix_sender(https://www.zabbix.com/documentation/1.8/ru/manpages/zabbix_sender):
    1)cd zabbix-1.8*/src
    2)sudo make
    3)sudo make install
Отправляем данные на траппер:
    while true; do sleep 1; zabbix_sender -z 127.0.0.1 -s MyLocalhost -k trap -c /etc/zabbix/zabbix_server.conf -o 9; done
    проверяем, что триггер срабатывает
Устанавливаем zabbix_agent и proxy: 
    sudo ./configure --enable-proxy --enable-agent --with-pgsql --with-net-snmp
    sudo make install
    не забывать про sudo, иначе в какой то момент можно не обнаружить бинарников в /usr/local/sbin
    компируем конфиги из сорсов, меняем пути к логам и коннекты к базе, запускаем:
    sudo cp misc/init.d/debian/zabbix-agent.conf /etc/init.d/zabbix-agent
    у файлов логов должны быть разрешения на запись + chown
    конфиг файлам сделать chmod +x
    далее можнет возникнуть проблема:
        в после запуска заббикс агента:
            $ sudo zabbix_agentd
        в логах:
            9166:20170831:050459.347 Starting Zabbix Agent [Zabbix server]. Zabbix 1.8.22 (revision 51172).
            9166:20170831:050459.347 listener failed: bind() for [[-]:10050] failed: [98] Address already in use
        порт уже занят заббикс сервером, проверить:
            netstat -ntlp
            tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      19967/zabbix_agentd
        решение:
            ps aux | grep -i zabbix_agentd
            kill -9 $zabbix_agentdpids(если процессов много, то проще pkill -9 zabbix_agentd)(помогает в аналогичных случаях)
            sudo zabbix_agentd
    
    zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]"(если возвращает результат - работае)
Прописываем UserParametr unixtime для заббикс агента:
    1)sudo vim /etc/zabbix/zabbix_agentd.conf 
    2)раскомментируем строчку UserParametr, указываем параметр вида '<ключ>,<команда>'
    3)UserParameter=unixtime, awk 'BEGIN {srand(); print srand()}'
    4)zabbix_get -s 127.0.0.1 -p 10050 -k "unixtime"
Создаем действие:
q   (https://docs.i-free.com/pages/viewpage.action?pageId=26215352)
    (https://www.zabbix.com/documentation/1.8/manual/config/actions)
    -insert into actions (actionid, name, eventsource, evaltype, status, def_shortdata, def_longdata, r_shortdata, r_longdata) values ('1','ZabbixTriggerActionPr', '1', '0','1','trigger problem','triggerproblem msg','{TRIGGER.STATUS}: {TRIGGER.NAME}','Trigger:{TRIGGER.NAME} problem');
    -insert into actions (actionid, name, eventsource, evaltype, status, def_shortdata, def_longdata, r_shortdata, r_longdata) values ('4','ZabbixTriggerActionPr', '0', '0','0','default subj msg','default msg','{TRIGGER.STATUS}: {TRIGGER.NAME}','Trigger:{TRIGGER.NAME} problem');
    
action
                                                            Trigger: {TRIGGER.NAME}\r                                    +
        |              |                                  | Trigger status: {TRIGGER.STATUS}\r                           +
        |              |                                  | Trigger severity: {TRIGGER.SEVERITY}\r                       +
        |              |                                  | Trigger URL: {TRIGGER.URL}\r                                 +
        |              |                                  | \r                                                           +
        |              |                                  | Item values:\r                                               +
        |              |                                  | \r                                                           +
        |              |                                  | 1. {ITEM.NAME1} ({HOSTNAME1}:{TRIGGER.KEY1}): {ITEM.VALUE1}\r+
        |              |                                  | 2. {ITEM.NAME2} ({HOSTNAME2}:{TRIGGER.KEY2}): {ITEM.VALUE2}\r+
        |              |                                  | 3. {ITEM.NAME3} ({HOSTNAME3}:{TRIGGER.KEY3}): {ITEM.VALUE3}
-создаем condition:
        insert into conditions (conditionid, actionid, conditiontype, operator, value) values ('15','1','2','0','23004');
        insert into conditions (conditionid, actionid, conditiontype, operator, value) values ('16','1','2','0','23005');
-insert into conditions (conditionid, actionid, conditiontype, operator, value) values ('46','4','2','0','23004');
-insert into conditions (conditionid, actionid, conditiontype, operator, value) values ('47','4','2','0','23005');
    
-через вебню можно создать оповещения для юзера admin, либо через таблицу operations
    -insert into operations (operationid, actionid, operationtype, objectid, longdata, default_msg) values ('9','4','1','0','MyLocalhost:/etc/zabbix/externalscripts/test2.sh','1');
    -по указанному пути создать скрипт, записывающий текст в файл, дать право на выполнение и сделать владельцем пользователя zabbix.
 operationid | actionid | operationtype | object | objectid | shortdata |                           longdata                           | esc_period | esc_step_from | esc_step_to | default_msg | evaltype 
-------------+----------+---------------+--------+----------+-----------+--------------------------------------------------------------+------------+---------------+-------------+-------------+----------
          33 |        4 |             1 |      0 |        0 |           | MyLocalhost:sudo bash /etc/zabbix/externalscripts/test1.sh |          0 |             1 |           1 |           1 |        0
Поскольку команда выполняется заббикс-агентом, то в его конфиге нужно раскомментировать строку EnableRemoteCommands и изменить значение на 1.
Снимаем дампы с трафика:
Убедиться, что zabbix server снят с мониторинга и стоит только MyLocalhost, чтобы не засрать дамп
    -vv : подробно
    -s : устанавливает ограничение на размер захватываемых пакетов, -s0 устанавливает это ограничение равным 65535 байтам.
    -i any: просматривать все сетевые интерфейсы
    c zabbix_sender:
        -sudo tcpdump -vv -s0 -i any 'port 10051 ' -w test/zabbixsender
        -шлем инфу на траппер x2(zabbix_sender -z 127.0.0.1 -s MyLocalhost -k trap -c /etc/zabbix/zabbix_server.conf -o 9)
        -открываем файл в wireshark
    с zabbix_get:
        снимаем дамп опроса клиента через zabbix-get:
        -sudo tcpdump -vv -s0 -i any 'port 10050' -w test/zabbixget
        -выполняем в отдельном терминале zabbix_get -s 127.0.0.1 -p 10050 -k "unixtime")х2
        -ctrl+c
        -wireshark
    с action:q
        -ставим триигер в ок(zabbix_sender -z 127.0.0.1 -s localhost2708 -k trap -c /etc/zabbix/zabbix_server.conf -o 10)
        -sudo tcpdump -vv -s0 -i any 'port 10050' -w test/zabbixacton(слушаем на 10050)
        -zabbix_sender -z 127.0.0.1 -s localhost2708 -k trap -c /etc/zabbix/zabbix_server.conf -o 9(отправляем сендером! на 10051, в дампе будет только инфа о работе action)
Установка zabby:
     1)git clone https://github.com/blin/zabby.git
     2)sudo python setup.py install
     3)zabby -c /usr/local/lib/python2.7/dist-packages/zabby/examples/config.py
     (версия python может отличаться)
     3)проверить работу забби можно:
        zabby_get agent.ping 
     4)проверить инструкции
Сделать так, чтобы забби читал /etc/zabby/
Создаем хост в для zabby:
    -insert into hosts (hostid, host, ip, port) values ('90002', 'localhostzabby','127.0.0.1','10052');
ТУТ ВСЕ АЙТЕМЫ БЕЗ ПЕРИОДИЧЕСКОГО ОПРОСА, В ЗАПРОС НУЖНО ДОБАВИТЬ ЗНАЧЕНИЕ DELAY.
Создаем айтем для zabby:
    -insert into items (itemid, type, description, key_, value_type,hostid) VALUES ('23007','0','zabbytest_os.name','os.name','4','90002');
    -insert into items (itemid, type, description, key_, value_type,hostid) VALUES ('23008','0','zabbytestrandint','random','3','90002');
    -insert into items (itemid, type, description, key_, value_type,hostid) VALUES ('23009','0','zabbytest_platform.system','platform.system','4','90002');
    -insert into items (itemid, type, description, key_, value_type,hostid) VALUES ('23010','0','zabbytest_platform.release','platform.release','4','90002');
Cоздаем триггеры для zabby:
    -insert into triggers (triggerid, expression, description) values ('23007','{23007}=0','os.name_was_changed');
    -insert into triggers (triggerid, expression, description) values ('23008','{23008}>5','random int > 5');
    -insert into triggers (triggerid, expression, description) values ('23009','{23007}=0','os.name_was_changed');
    -insert into triggers (triggerid, expression, description) values ('23010','{23007}=0','os.name_was_changed');
Создаем функции для zabby:
    -insert into functions (itemid, functionid, function, triggerid) values ('23007','23007','last','23007');
    -insert into functions (itemid, functionid, function, triggerid) values ('23008','23008','last','23008');
    -insert into functions (itemid, functionid, function, triggerid) values ('23009','23009','last','23009');
    -insert into functions (itemid, functionid, function, triggerid) values ('23010','23010','last','23010');
Создаем две метрики для забби и создаем конфиги забби:
    1)sudo mkdir -p /etc/zabby/items
    2)sudo vim 30_customitems.py
            ```
            from zabby.core.utils import sh
            from random import randint
            items = {
                   #my items
                 'os.name': lambda: os.name,
                 'platform.system': platform.system,
                 'platform.release': platform.release,
                 'random': lambda: random.randint(1, 10),
            } 
            ```
    3)sudo vim /etc/zabby/config,py
            ```
            import os
            listen_host = '0.0.0.0'
            listen_port = 10052
            _config_dir = os.path.dirname(os.path.abspath(__file__))
            _item_dir = os.path.join(_config_dir, 'items')
            item_files = sorted([os.path.join(_item_dir, item_file)
                                for item_file in os.listdir(_item_dir)
                                if item_file.endswith('.py')])
            logging_conf = os.path.join(_config_dir, 'logging.conf')
            ```
    4)sudo vim /etc/zabby/logging.conf
            ```
            [loggers]
            keys=root
            [handlers]
            keys=file
            [formatters]
            keys=default
            [logger_root]
            level=DEBUG
            handlers=file
            [handler_file]
            class=logging.handlers.TimedRotatingFileHandler
            formatter=default
            args=('/var/log/zabby/zabby.log','midnight', 1, 7)
            [formatter_default]
            format=%(asctime)s %(levelname)s [%(name)s] %(message)s
            datefmt=%Y-%m-%d %H:%M:%S
            ```

No Comments
Back to top