zabbix 모니터링 nginx 와 php - fpm

26757 단어 nginxzabbixqbs
일반적인 임 무 를 감시 하 는 데 는 nginx 와 phop - fpm 의 감시 가 빠 질 수 없다. 최근 에 도 zabbix 를 다시 정리 하고 다시 공부 하기 시작 했다. 안의 스 크 립 트, 프로필 과 템 플 릿 은 모두 라 는 책 에서 유래 되 었 고 자신의 환경 에 따라 적당 하 게 수정 되 었 다.
모니터링 nginx server
1.1 nginx 와 php - fpm 설정
php - fpm 의 [ww] 세그먼트 설정 파일 추가
1
2
[www]
pm.status_path = /fpm_status.php

 
nginx 새 서버 세그먼트 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
    listen  127.0.0.1:80;
    allow 127.0.0.1;
    deny all;			#         

    #    nginx    
    location /nginxstatus {
        stub_status on;
        access_log off;
    }

	#    php-fpm    
    location ~ ^/(fpm_status) {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi.conf;
    }
}

 
방문 테스트, 상태 정 보 를 볼 수 있 도록 확보
1
2
curl http://127.0.0.1/nginxstatus
curl http://127.0.0.1/fpm_status.php

1.2 검 측 스 크 립 트 와 userparameter 설정
에이전트 가 서버 에 데 이 터 를 주동 적 으로 보 내 는 active 모드 를 설 정 했 습 니 다.
우선 디 렉 터 리 구 조 를 봅 니 다.
1
2
3
4
5
6
7
8
9
# tree /etc/zabbix/
/etc/zabbix/
├── scripts
│   ├── check_nginx_status.sh
│   └── check_phpfpm.sh
├── zabbix_agentd.conf
└── zabbix_agentd.d
    ├── userparameter_nginx.conf
    └── userparameter_phpfpm.conf

 
다음은 각각 파일 에 대응 합 니 다.
  • userparameter_nginx.conf
  • 1
    2
    3
    4
    5
    6
    7
    UserParameter=nginx.accepts,/etc/zabbix/scripts/check_nginx_status.sh accepts
    UserParameter=nginx.handled,/etc/zabbix/scripts/check_nginx_status.sh handled
    UserParameter=nginx.requests,/etc/zabbix/scripts/check_nginx_status.sh requests
    UserParameter=nginx.connections.active,/etc/zabbix/scripts/check_nginx_status.sh active
    UserParameter=nginx.connections.reading,/etc/zabbix/scripts/check_nginx_status.sh reading
    UserParameter=nginx.connections.writing,/etc/zabbix/scripts/check_nginx_status.sh writing
    UserParameter=nginx.connections.waiting,/etc/zabbix/scripts/check_nginx_status.sh waiting
  • userparameter_phpfpm.conf
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    UserParameter=phpfpm.status.pool,/etc/zabbix/scripts/check_phpfpm.sh pool
    UserParameter=phpfpm.status.process.manager,/etc/zabbix/scripts/check_phpfpm.sh process_manager
    UserParameter=phpfpm.status.start.since,/etc/zabbix/scripts/check_phpfpm.sh start_since
    UserParameter=phpfpm.status.accepted.conn,/etc/zabbix/scripts/check_phpfpm.sh accepted_conn
    UserParameter=phpfpm.status.listen.queue,/etc/zabbix/scripts/check_phpfpm.sh listen_queue
    UserParameter=phpfpm.status.max.listen.queue,/etc/zabbix/scripts/check_phpfpm.sh max_listen_queue
    UserParameter=phpfpm.status.listen.queue.len,/etc/zabbix/scripts/check_phpfpm.sh listen_queue_len
    UserParameter=phpfpm.status.idle.processes,/etc/zabbix/scripts/check_phpfpm.sh idle_processes
    UserParameter=phpfpm.status.active.processes,/etc/zabbix/scripts/check_phpfpm.sh active_processes
    UserParameter=phpfpm.status.total.processes,/etc/zabbix/scripts/check_phpfpm.sh total_processes
    UserParameter=phpfpm.status.max.active.processes,/etc/zabbix/scripts/check_phpfpm.sh max_active_processes
    UserParameter=phpfpm.status.max.children.reached,/etc/zabbix/scripts/check_phpfpm.sh max_children_reached
  • check_nginx_status.sh
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    #!/bin/bash
    
    source /etc/bashrc >/dev/null 2>&1
    source /etc/profile  >/dev/null 2>&1
    nginxstatus=http://127.0.0.1/nginxstatus
    
    # Functions to return nginx stats
    function checkavailable {
        code=$(curl -o /dev/null -s -w %{http_code} ${nginxstatus})
        if [ "${code}" == "200" ]
        then
            return 1
        else
            echo  0
        fi
    }
    function active {
        checkavailable|| curl -s "${nginxstatus}" | grep 'Active' | awk '{print $3}'
    }
    function reading {
        checkavailable|| curl -s "${nginxstatus}" | grep 'Reading' | awk '{print $2}'
    }
    function writing {
        checkavailable|| curl -s "${nginxstatus}" | grep 'Writing' | awk '{print $4}'
    }
    function waiting {
        checkavailable|| curl -s "${nginxstatus}" | grep 'Waiting' | awk '{print $6}'
    }
    function accepts {
        checkavailable|| curl -s "${nginxstatus}" | awk NR==3 | awk '{print $1}'
    }
    function handled {
        checkavailable|| curl -s "${nginxstatus}" | awk NR==3 | awk '{print $2}'
    }
    function requests {
        checkavailable|| curl -s "${nginxstatus}" | awk NR==3 | awk '{print $3}'
    }
    
    case "$1" in
        active)
            active
            ;;
        reading)
            reading
            ;;
        writing)
            writing
            ;;
        waiting)
            waiting
            ;;
        accepts)
            accepts
            ;;
        handled)
            handled
            ;;
        requests)
            requests
            ;;
        *)
            echo "Usage: $0 {active |reading |writing |waiting |accepts |handled |requests }"
    esac
  • check_phpfpm.sh
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    #!/bin/bash
    
    source /etc/bashrc >/dev/null 2>&1
    source /etc/profile  >/dev/null 2>&1
    
    LOG_FILE=/var/log/zabbix/phpfpmstatus.log
    curl http://127.0.0.1/fpm_status.php >${LOG_FILE} 2>&1
    
    pool(){
         awk '/pool/ {print $NF}' ${LOG_FILE}
    }
    process_manager() {
         awk '/process manager/ {print $NF}' ${LOG_FILE}
    }
    
    start_since(){
        awk '/^start since:/ {print $NF}' ${LOG_FILE}
    }
    accepted_conn(){
        awk '/^accepted conn:/ {print $NF}' ${LOG_FILE}
    }
    listen_queue(){
        awk '/^listen queue:/ {print $NF}' ${LOG_FILE}
    }
    max_listen_queue(){
        awk '/^max listen queue:/ {print $NF}' ${LOG_FILE}
    }
    listen_queue_len(){
        awk '/^listen queue len:/ {print $NF}' ${LOG_FILE}
    }
    idle_processes(){
        awk '/^idle processes:/ {print $NF}' ${LOG_FILE}
    }
    active_processes(){
        awk '/^active processes:/ {print $NF}' ${LOG_FILE}
    }
    total_processes(){
        awk '/^total processes:/ {print $NF}' ${LOG_FILE}
    }
    max_active_processes(){
        awk '/^max active processes:/ {print $NF}' ${LOG_FILE}
    }
    max_children_reached(){
        awk '/^max children reached:/ {print $NF}' ${LOG_FILE}
    }
    
    
    case "$1" in
    pool)
        pool
        ;;
    process_manager)
        process_manager
        ;;
    start_since)
        start_since
        ;;
    accepted_conn)
        accepted_conn
        ;;
    listen_queue)
        listen_queue
        ;;
    max_listen_queue)
        max_listen_queue
        ;;
    listen_queue_len)
        listen_queue_len
        ;;
    idle_processes)
        idle_processes
        ;;
    active_processes)
        active_processes
        ;;
    total_processes)
        total_processes
        ;;
    max_active_processes)
        max_active_processes
        ;;
    max_children_reached)
        max_children_reached
        ;;
    *)
        echo "Usage: $0 {pool|process_manager|start_since|accepted_conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processes|total_processes|max_active_processes|max_children_reached}"
    esac

    위의 모든 설정 이 완료 되면 에이전트 를 다시 시작 하면 됩 니 다.
    1.3 템 플 릿 추가, 호출
    송 씨 어른 의 책 에는 대량의 템 플 릿 이 제공 되 어 있 습 니 다. 만약 에 자신 이 다시 쓰 고 템 플 릿 을 만 들 지 않 으 려 면 이 템 플 릿 을 가지 고 자신의 환경 에 따라 수정 하면 됩 니 다.
    nginx 의 템 플 릿
    php - fpm 템 플 릿
    마지막 으로 보 여 주 는 효 과 는 다음 그림 (zatree 중) 과 같 습 니 다.

    좋은 웹페이지 즐겨찾기