Zabbix

Install

Add own debugging log function in Zabbix

  • zabbix가 이상하게 설정페이지에서 Next Step을 눌러도 다음으로 넘어 가지 않아서 debugging을 시작했다.
  • zabbix 3.0은 Z::getInstance()->run 식으로 요청을 해결하는 듯 하다. 어이했건, class ZZBase.php를 상속하여 사용한다.
  • 원하는 function, 예를 들어서 아래와 같은 로그기능을 넣어서 사용 가능하다.
  • Add log function in Zabbix Base class in /usr/share/zabbix/include/classes/core
    class Z extends ZBase {
        public function mlog($msg, $category='common') {
            $dateTimeStamp = date("Y-m-d H:i:s");
            $logMessage = "$dateTimeStamp $category: $msg\n";
            file_put_contents('/var/log/zabbix/mlog_zabbix.log', $logMessage, FILE_APPEND);
        }
    }
    
  • Zabbix uses singleton pattern for Zabbix Base Instance, you can use mlog function like below.
    Z::getInstance()->mlog("request server ==> " . print_r($_SERVER, true), __FILE__);
    Z::getInstance()->mlog("request post ==> " . print_r($_POST, true), __FILE__);
    Z::getInstance()->mlog("request get ==> " . print_r($_GET, true), __FILE__);
    Z::getInstance()->mlog("request files ==> " . print_r($_FILES, true), __FILE__);
    Z::getInstance()->mlog("current session_id ==> " . session_id(), __FILE__);
    

Zabbix 설치시에 반드시 확인해야 하는 폴더 owner

dir

  • /etc/zabbix/web
  • /var/lib/php/session

내가 선택한 방법

  • www group을 만든다.
  • nginx, apache를 www에 secondary group으로 추가한다. ( primary group은 수정하지 않았다. )
  • nginx.conf ( user nginx www )
  • httpd.conf or php-fpm conf ( user=apache, gorup=www )
  • /etc/zabbix/web
    $ chown -R apache:www /etc/zabbix/web/
    
    total 16
    drwxr-x--- 2 apache www  4096 Jan 21 18:28 .
    drwxr-xr-x 4 root   root 4096 Jan 21 17:29 ..
    -rw-r--r-- 1 apache www  1036 Sep 30 02:42 maintenance.inc.php
    
  • /var/lib/php/session
    $ chown apache:www /var/lib/php/session
    $ ls -al /var/lib/php  
    total 16
    drwxr-xr-x  4 root   root   4096 Jan 16 03:06 .
    drwxr-xr-x 18 root   root   4096 Jan 21 17:29 ..
    drwxrwx---  2 apache www    4096 Jan 21 18:27 session
    

Nginx conf for Zabbix

server {
    listen      80;
    server_name zabbixmonitor.gatsbylee.com;
    root        /usr/share/zabbix;
    
    include global/restrictions.conf;

    # Disable access to important zabbix locations
    location ~* ^/(conf|api|include)($|\/) {
        deny all;
    }

    # If the requested URI exists and can be served by nginx do that.
    # If not, is it a directory that can be indexed or do we have an index directive to apply?
    # If not, then rewrite the request internally to /index.php and pass it to your backend.
    # Only when nginx can't serve that requested URI directly does your backend get involved.
    location / {
        try_files $uri $uri/ /index.php;
    }
    location ~ \.php$ {
        include       fastcgi_params;
        fastcgi_pass  php;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        
        fastcgi_buffers 8 256k;
        fastcgi_buffer_size 128k;
        fastcgi_intercept_errors on;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }
    # Directives to send expires headers and turn off 404 error logging.
    location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
        expires       max;
        access_log    off;
        log_not_found off;
        add_header Cache-Control private;
    }
}

PHP required conf

  • /etc/php.ini ( apache를 쓰는 경우 )
    ; added for zabbix
    post_max_size = 16M
    max_execution_time = 300
    max_input_time = 300
    date.timezone = America/Los_Angeles
    
  • /etc/php-fpm.d/www.conf ( php-fpm을 쓰는 경우 )
    ; added for zabbix
    php_admin_value[post_max_size] = 16M
    php_admin_value[max_execution_time] = 300
    php_admin_value[max_input_time] = 300
    php_admin_value[date.timezone] = America/Los_Angeles
    

How to

query failed: [2006] MySQL server has gone away

Zabbix3.0 을 설치하면서, 셋업 화면이 진행이 안된 경우.

  • Nginx + php-fpm
  • 이상했다. UI 셋업 화면에서 진행이 되지 않았다. 문제는 Zabbix가 PHP 사용하는데, session을 파일에 저장하고 있지 못하고 있는 것이였다.
  • php는 기본적으로다가 파일에 session을 저장하는에 php.ini 에 보면 session.save_path = "/var/lib/php/session" 초기 설정되어 있다.
  • 이 디렉토리의 초기 owner는 root:apache'''이다.
  • apache를 사용했다면, 그냥 모르고 지나갈 일이였는데, 나는 php-fpm에 user를 nginx로 설정해 두어서, nginx에서 upstream으로 php-fpm으로 요청을 넘기면, php-fpm을 user=nginx 설정을 따라서, 디렉토리를 niginx를 사용자로 이용하게 된다.
  • 그러다보니, '/var/lib/php/session' 에 session을 저장하지 못해서, 셋업 첫 화면에서 계속해서 진행이 되지 않았던 것이다.
  • /var/lib/php/session owner를 nginx로 설정 한 이후로 정상적으로 동작되었다. ( 3일을 고생했다. ㅠㅠ )

User Parameter

  • ref
  • zabbix에 customized된 function(?) 같은 것을 설정 할 수 있다. Zabbix에서는 User Parameter라고 한다.
  • https://www.zabbix.com/documentation/3.0/manual/config/items/userparameters
  • https://www.zabbix.com/documentation/3.0/manual/config/items/itemtypes/simple_checks
  • https://www.zabbix.com/documentation/3.0/manual/config/items/userparameters/extending_agent
  • pre-defined User Parameter
    • /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
    • 요것을 잘 보면. HOME=/var/lib/zabbix 이렇게 HOME의 위치를 설정하고, mysql를 실행한다. 이럴때, /var/lib/zabbix/my.cnf 안에 있는 user, password를 쓰게 된다. 설정된 HOME dir은 존재하지 않는데, 따라서 디렉토리를 만든 후 파일을 만들어도 되고.. 아니면, 그냥. 다른 곳에 만들어도 된다. 난 /var/log/zabbix로 HOME을 변경하여 아래와 같이 my.cnf를 만들었다.
      [client]
      user=zabbix
      password=
      
      # For all the following commands HOME should be set to the directory that has .my.cnf file with password information.
      
      # Flexible parameter to grab global variables. On the frontend side, use keys like mysql.status[Com_insert].
      # Key syntax is mysql.status[variable].
      UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'
      
      # Flexible parameter to determine database or table size. On the frontend side, use keys like mysql.size[zabbix,history,data].
      # Key syntax is mysql.size[<database>,<table>,<type>].
      # Database may be a database name or "all". Default is "all".
      # Table may be a table name or "all". Default is "all".
      # Type may be "data", "index", "free" or "both". Both is a sum of data and index. Default is "both".
      # Database is mandatory if a table is specified. Type may be specified always.
      # Returns value in bytes.
      # 'sum' on data_length or index_length alone needed when we are getting this information for whole database instead of a single table
      UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/var/lib/zabbix mysql -N'
      
      UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
      UserParameter=mysql.version,mysql -V
      

something learned about Zabbix User Parameter

  • custom script, such as *.py shouldn't be in /etc/zabbix/zabbix_agentd.d/ dir. If there is any, then zabbix-agent won't restart properly.
  • In /etc/zabbix/zabbix_agentd.d/, there should be only User Parameter configuration files.
  • zabbix user and group is used, so permission need to be carefully controlled.

Zabbix Agent Passive / Active

  • ref: http://docs.linuxconsulting.mn.it/notes/zabbix-active-agent
  • 시작: /var/log/zabbix/zabbix_agentd.log 보다가.. 요런 log를 보게된다. 그리고, 이것이 Zabbix Agent의 Passive / Active mode랑 관련이 있다는 것을 알게 되었다. Zabbix Agent가 설치 될때 자동으로 Active mode가 켜지는 것 같음.
     24754:20170121:221128.520 no active checks on server [127.0.0.1:10051]: host [Zabbix Server] not found
     24754:20170121:221328.824 no active checks on server [127.0.0.1:10051]: host [Zabbix Server] not found
     24754:20170121:221528.836 no active checks on server [127.0.0.1:10051]: host [Zabbix Server] not found
     24754:20170121:221728.853 no active checks on server [127.0.0.1:10051]: host [Zabbix Server] not found
    
  • Zabbix Passive / Active란 무엇인가?
    • Passive: Zabbix Server가 Zabbix Agent에게 요청하면 Agent가 데이터를 보내주는 방식. Zabbix Agent쪽에는 Zabbix Server의 요청을 위해 대기하는 process가 있다.
    • Active: Zabbix Agent가 Zabbix Server에 actively 데이타를 보내는 방식. - Active checks are needed when it is not possible for the zabbix server to access a specific port on the remote monitored machine (for example this can be caused by a firewall).
  • 어떻게 설정하나?
    • zabbix agent가 있는 server에 있는 /etc/zabbix/zabbix_agentd.conf를 수정한다.
      • ServerActive는 Zabbix Server의 ip 또는 hostname으로서, one or more comma delimited Zabbix server.
      • Hostname는 must be a unique, case sensitive hostname for this host: this value is required for active checks and must match the value configured on the server. I also add some random characters to the hostname to reduce the possibility of collisions (e.g. MAILSERVER1-KLJUYGHN).
      • Zabbix Agent쪽에서 Passive mode는 전혀 사용하지 않고 Active mode만 사용한다면, Zabbix Server의 Passive 요청을 위해 대기하는 Zabbix agent process가 필요 없으므로 StartAgents는 0으로 설정. 반드시 0으로 설정 할 필요는 없지만, 설정하면, 불필요한 process를 줄일 수 있다.
        ServerActive=YOUR_SERVER_IP
        Hostname=CLIENT_HOSTNAME
        StartAgents=0
        
    • Zabbix Server Side 설정
      • 우선 Zabbix Agent가 있는 host를 Zabbix monitor에 추가한다. 일반적인 호스트 추가 하듯.
      • 그리고 : Configuration > Hosts > Zabbix Host가 있는 host 이름을 클릭 > Agent Interface를 추가해 준다. 아래와 같이.
        • DNS name 반드시 Agent쪽에 설정한 Hostname가 같아야 한다.
        • IP Address는 0.0.0.0

  • Zabbix item 설정
    • Zabbix에서 default로 설치된 Template들은 Passive mode를 default로 사용한다. Active mode를 이용해 monitoring item의 정보를 수집하기 위해서는 item의 Type을 Zabbix Agent (active) 설정해 주어야 한다.

Configuration

Host / Host groups / Template

  • A host must belong to at least one host group. ( can be belonged to more than one host group )
  • A host
    • can have multiple monitoring items
      • items can be added by linking Template
  • A host group
    • can be linked to multiple Template
  • A Template can be organized hierarchically.

External Resources

Last modified 3 years ago Last modified on 06/02/17 20:33:49

Attachments (2)

Download all attachments as: .zip