9 HTTP 에이전트

개요

이 아이템 유형은 HTTP/HTTPS 프로토콜을 사용하여 데이터 폴링을 허용합니다. 또한 Zabbix sender 유틸리티나 Zabbix sender 프로토콜(Zabbix 서버 또는 프록시로 데이터 전송용), 또는 history.push API 메소드(Zabbix 서버로 데이터 전송용)를 사용하여 트래핑도 가능합니다.

HTTP 아이템 검사는 Zabbix 서버에 의해 실행됩니다. 하지만 호스트가 Zabbix 프록시에 의해 모니터링되는 경우, HTTP 아이템 검사는 프록시에 의해 실행됩니다.

HTTP 아이템 검사는 모니터링되는 호스트에서 실행 중인 에이전트가 필요하지 않습니다.

HTTP 에이전트는 HTTP와 HTTPS를 모두 지원합니다. Zabbix는 선택적으로 리디렉션을 따릅니다(아래 리디렉션 따르기 옵션 참조). 최대 리디렉션 횟수는 10으로 하드코딩되어 있습니다(cURL 옵션 CURLOPT_MAXREDIRS 사용).

Zabbix 서버/프록시는 초기에 cURL (libcurl) 지원으로 구성되어야 합니다.

HTTP 검사는 비동기적으로 실행됩니다 - 다른 검사가 시작되기 전에 하나의 요청에 대한 응답을 받을 필요가 없습니다. DNS 해석 또한 비동기적입니다.

비동기 검사의 최대 동시 실행 수는 1000개입니다(MaxConcurrentChecksPerPoller에 의해 정의됨).

비동기 HTTP 에이전트 폴러의 수는 StartHTTPAgentPollers 매개변수에 의해 정의됩니다.

지속적 연결 cURL 기능이 Zabbix 7.0부터 HTTP 에이전트 검사에 추가되었습니다.

구성

HTTP 아이템을 구성하려면:

  1. 데이터 수집 > 호스트로 이동합니다.
  2. 호스트 행에서 아이템을 클릭합니다.
  3. 아이템 생성을 클릭합니다.
  4. 양식에 아이템 매개변수를 입력합니다.

모든 필수 입력 필드는 빨간색 별표로 표시됩니다.

HTTP 아이템에 특정 정보가 필요한 필드는 다음과 같습니다:

매개변수 설명
유형 여기에서 HTTP agent를 선택합니다.
고유한 아이템 키를 입력합니다.
URL 연결하고 데이터를 검색할 URL입니다. 예를 들어:
https://www.example.com
http://www.example.com/download
도메인 이름은 유니코드 문자로 지정할 수 있습니다. HTTP 검사를 실행할 때 자동으로 punycode로 ASCII로 변환됩니다.
파싱 버튼을 사용하여 선택적 쿼리 필드(예: ?name=Admin&password=mypassword)를 URL에서 분리하고, 속성과 값을 자동 URL 인코딩을 위해 쿼리 필드로 이동할 수 있습니다.
2048자로 제한됩니다.
지원되는 매크로: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, 사용자 매크로, 낮은 수준 탐지 매크로.
이는 CURLOPT_URL cURL 옵션을 설정합니다.
쿼리 필드 URL용 변수(위 참조).
속성과 값 쌍으로 지정됩니다.
값은 자동으로 URL 인코딩됩니다. 매크로의 값은 해결된 다음 자동으로 URL 인코딩됩니다.
지원되는 매크로: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, 사용자 매크로, 낮은 수준 탐지 매크로.
이는 CURLOPT_URL cURL 옵션을 설정합니다.
요청 유형 요청 메서드 유형을 선택합니다: GET, POST, PUT 또는 HEAD
요청 본문 유형 요청 본문 유형을 선택합니다:
원시 데이터 - 사용자 정의 HTTP 요청 본문, 매크로가 치환되지만 인코딩은 수행되지 않습니다
JSON 데이터 - JSON 형식의 HTTP 요청 본문입니다. 매크로는 문자열, 숫자, true 및 false로 사용할 수 있습니다. 문자열로 사용되는 매크로는 큰따옴표로 묶어야 합니다. 매크로의 값은 해결된 다음 자동으로 이스케이프됩니다. 헤더에 "Content-Type"이 지정되지 않은 경우 기본적으로 "Content-Type: application/json"이 됩니다
XML 데이터 - XML 형식의 HTTP 요청 본문입니다. 매크로는 텍스트 노드, 속성 또는 CDATA 섹션으로 사용할 수 있습니다. 매크로의 값은 해결된 다음 텍스트 노드와 속성에서 자동으로 이스케이프됩니다. 헤더에 "Content-Type"이 지정되지 않은 경우 기본적으로 "Content-Type: application/xml"이 됩니다
XML 데이터 선택 시 libxml2가 필요합니다.
요청 본문 요청 본문을 입력합니다.
지원되는 매크로: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, 사용자 매크로, 낮은 수준 탐지 매크로.
헤더 요청을 수행할 때 전송될 사용자 정의 HTTP 헤더입니다.
속성과 값 쌍으로 지정됩니다.
지원되는 매크로: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, 사용자 매크로, 낮은 수준 탐지 매크로.
이는 CURLOPT_HTTPHEADER cURL 옵션을 설정합니다.
필수 상태 코드 예상되는 HTTP 상태 코드 목록입니다. Zabbix가 목록에 없는 코드를 받으면 아이템이 지원되지 않게 됩니다. 비어 있으면 검사를 수행하지 않습니다.
예: 200,201,210-299
목록에서 지원되는 매크로: 사용자 매크로, 낮은 수준 탐지 매크로.
이는 CURLINFO_RESPONSE_CODE cURL 옵션을 사용합니다.
리디렉션 따라가기 HTTP 리디렉션을 따라가려면 체크박스를 표시합니다.
이는 CURLOPT_FOLLOWLOCATION cURL 옵션을 설정합니다.
검색 모드 검색해야 할 응답 부분을 선택합니다:
본문 - 본문만
헤더 - 헤더만
본문과 헤더 - 본문과 헤더
JSON으로 변환 검색 모드본문으로 설정되지 않은 경우 헤더가 "header" 키 아래에 속성과 값 쌍으로 저장됩니다.
'Content-Type: application/json'이 발견되면 본문이 객체로 저장되고, 그렇지 않으면 문자열로 저장됩니다. 예를 들어:
HTTP 프록시 [protocol://][username[:password]@]proxy.example.com[:port] 형식을 사용하여 HTTP 프록시를 지정할 수 있습니다.
선택적 protocol:// 접두사는 대안 프록시 프로토콜(예: https, socks4, socks5; 문서 참조; 프로토콜 접두사 지원은 cURL 7.21.7에서 추가됨)을 지정하는 데 사용할 수 있습니다. 프로토콜이 지정되지 않으면 프록시가 HTTP 프록시로 처리됩니다. 잘못된 프로토콜을 지정하면 연결이 실패하고 아이템이 지원되지 않게 됩니다.
기본적으로 1080 포트가 사용됩니다.
지정되면 프록시는 http_proxy, HTTPS_PROXY와 같은 프록시 관련 환경 변수를 덮어씁니다. 지정되지 않으면 프록시는 프록시 관련 환경 변수를 덮어쓰지 않습니다. 입력된 값은 "있는 그대로" 전달되며, 정상성 검사는 수행되지 않습니다.
HTTP 프록시에서는 단순 인증만 지원됩니다.
지원되는 매크로: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, 사용자 매크로, 낮은 수준 탐지 매크로.
이는 CURLOPT_PROXY cURL 옵션을 설정합니다.
HTTP 인증 인증 옵션을 선택합니다:
없음 - 인증이 사용되지 않습니다;
기본 - 기본 인증이 사용됩니다;
NTLM - NTLM (Windows NT LAN Manager) 인증이 사용됩니다;
Kerberos - Kerberos 인증이 사용됩니다(참조: Zabbix와 Kerberos 구성);
Digest - Digest 인증이 사용됩니다.
이는 CURLOPT_HTTPAUTH cURL 옵션을 설정합니다.
사용자 이름 사용자 이름을 입력합니다(최대 255자).
이 필드는 HTTP 인증이 Basic, NTLM, Kerberos 또는 Digest로 설정된 경우 사용할 수 있습니다. 사용자 매크로 및 낮은 수준 탐지 매크로가 지원됩니다.
패스워드 사용자 패스워드를 입력합니다(최대 255자).
이 필드는 HTTP 인증이 Basic, NTLM, Kerberos 또는 Digest로 설정된 경우 사용할 수 있습니다. 사용자 매크로 및 낮은 수준 탐지 매크로가 지원됩니다.
SSL 피어 검증 웹 서버의 SSL 인증서를 검증하려면 체크박스를 표시합니다. 서버 인증서는 시스템 전체 인증 기관(CA) 위치에서 자동으로 가져옵니다. Zabbix 서버 또는 프록시 구성 매개변수 SSLCALocation을 사용하여 CA 파일의 위치를 재정의할 수 있습니다.
이는 CURLOPT_SSL_VERIFYPEER cURL 옵션을 설정합니다.
SSL 호스트 검증 웹 서버 인증서의 Common Name 필드 또는 Subject Alternate Name 필드가 일치하는지 검증하려면 체크박스를 표시합니다.
이는 CURLOPT_SSL_VERIFYHOST cURL 옵션을 설정합니다.
SSL 인증서 파일 클라이언트 인증에 사용되는 SSL 인증서 파일 이름입니다. 인증서 파일은 PEM1 형식이어야 합니다. 인증서 파일에 개인 키도 포함되어 있는 경우 SSL 키 파일 필드를 비워 둡니다. 키가 암호화된 경우 SSL 키 패스워드 필드에 패스워드를 지정합니다. 이 파일이 포함된 디렉터리는 Zabbix 서버 또는 프록시 구성 매개변수 SSLCertLocation으로 지정됩니다.
지원되는 매크로: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, 사용자 매크로, 낮은 수준 탐지 매크로.
이는 CURLOPT_SSLCERT cURL 옵션을 설정합니다.
SSL 키 파일 클라이언트 인증에 사용되는 SSL 개인 키 파일 이름입니다. 개인 키 파일은 PEM1 형식이어야 합니다. 이 파일이 포함된 디렉터리는 Zabbix 서버 또는 프록시 구성 매개변수 SSLKeyLocation으로 지정됩니다.
지원되는 매크로: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, 사용자 매크로, 낮은 수준 탐지 매크로.
이는 CURLOPT_SSLKEY cURL 옵션을 설정합니다.
SSL 키 패스워드 SSL 개인 키 파일 패스워드입니다.
지원되는 매크로: 사용자 매크로, 낮은 수준 탐지 매크로.
이는 CURLOPT_KEYPASSWD cURL 옵션을 설정합니다.
타임아웃 Zabbix는 URL 처리에 설정된 시간 이상을 소비하지 않습니다(1-600초). 실제로 이 매개변수는 URL에 연결하기 위한 최대 시간과 HTTP 요청을 수행하기 위한 최대 시간을 정의합니다. 따라서 Zabbix는 한 번의 검사에 2 x 타임아웃 초 이상을 소비하지 않습니다.
이는 CURLOPT_TIMEOUT cURL 옵션을 설정합니다.
타임아웃 매개변수에 대한 자세한 정보는 일반 아이템 속성을 참조하십시오.
트래핑 활성화 이 체크박스가 표시되면 아이템이 트래퍼 아이템으로도 기능하며 Zabbix sender 유틸리티나 Zabbix sender 프로토콜을 사용하여 Zabbix 서버 또는 프록시로 전송된 데이터를 수락하거나, history.push API 메서드를 사용하여 Zabbix 서버로 전송된 데이터를 수락합니다. 데이터 전송에 대한 자세한 정보는: 트래퍼 아이템을 참조하십시오.
허용된 호스트 트래핑 활성화 체크박스가 표시된 경우에만 표시됩니다.
CIDR 표기법(선택사항) 또는 DNS 이름의 쉼표로 구분된 IP 주소 목록입니다.
지정된 경우 여기에 나열된 호스트에서만 들어오는 연결이 수락됩니다.
IPv6 지원이 활성화된 경우 '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1'은 동일하게 처리되고 '::/0'은 모든 IPv4 또는 IPv6 주소를 허용합니다.
'0.0.0.0/0'은 모든 IPv4 주소를 허용하는 데 사용할 수 있습니다.
"IPv4 호환 IPv6 주소"(0000::/96 접두사)는 지원되지만 RFC4291

예제

예제 1

Elasticsearch와 같은 서비스에서 데이터를 가져오기 위해 간단한 GET 요청을 보내세요:

  • URL이 localhost:9200/?pretty인 GET 항목을 생성하세요
  • 응답을 확인하세요:
    {
      "name" : "YQ2VAY-",
      "cluster_name" : "elasticsearch",
      "cluster_uuid" : "kH4CYqh5QfqgeTsjh2F9zg",
      "version" : {
        "number" : "6.1.3",
        "build_hash" : "af51318",
        "build_date" : "2018-01-26T18:22:55.523Z",
        "build_snapshot" : false,
        "lucene_version" : "7.1.0",
        "minimum_wire_compatibility_version" : "5.6.0",
        "minimum_index_compatibility_version" : "5.0.0"
      },
      "tagline" : "You know, for search"
    }
  • 이제 JSONPath 전처리 단계를 사용하여 버전 번호를 추출하세요: $.version.number
예제 2

Elasticsearch와 같은 서비스에서 데이터를 검색하기 위해 간단한 POST 요청을 보냅니다:

  • 다음 URL로 POST 아이템을 생성합니다: http://localhost:9200/str/values/_search?scroll=10s
  • 프로세서 로드(코어당 1분 평균)를 얻기 위해 다음 POST 본문을 구성합니다
    {
        "query": {
            "bool": {
                "must": [{
                    "match": {
                        "itemid": 28275
                    }
                }],
                "filter": [{
                    "range": {
                        "clock": {
                            "gt": 1517565836,
                            "lte": 1517566137
                        }
                    }
                }]
            }
        }
    }
  • 수신된 응답:
    {
        "_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAkFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAJRZZUTJWQVktVFNacU5nRHhlcEI0QUxRAAAAAAAAACYWWVEyVkFZLVRTWnFOZ0R4ZXBCNEFMUQAAAAAAAAAnFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAKBZZUTJWQVktVFNacU5nRHhlcEI0QUxR",
        "took": 18,
        "timed_out": false,
        "_shards": {
            "total": 5,
            "successful": 5,
            "skipped": 0,
            "failed": 0
        },
        "hits": {
            "total": 1,
            "max_score": 1.0,
            "hits": [{
                "_index": "dbl",
                "_type": "values",
                "_id": "dqX9VWEBV6sEKSMyk6sw",
                "_score": 1.0,
                "_source": {
                    "itemid": 28275,
                    "value": "0.138750",
                    "clock": 1517566136,
                    "ns": 25388713,
                    "ttl": 604800
                }
            }]
        }
    }
  • 이제 아이템 값을 얻기 위해 JSONPath 전처리 단계를 사용합니다: $.hits.hits[0]._source.value
Example 3

apiinfo.version을 사용하여 Zabbix API가 살아있는지 확인합니다.

  • 아이템 설정:

JSON 데이터와 함께 POST 메서드를 사용하고, 요청 헤더를 설정하며 헤더만 반환하도록 요청하는 것을 참고하세요:

  • HTTP 코드를 얻기 위한 정규 표현식을 사용한 아이템 값 전처리:

  • 최신 데이터에서 결과 확인:

예제 4

Openweathermap 공개 서비스에 연결하여 날씨 정보를 가져옵니다.

  • 단일 JSON으로 벌크 데이터 수집을 위한 마스터 아이템을 구성합니다:

쿼리 필드에서 매크로 사용법에 주목하세요. 작성 방법은 Openweathermap API를 참조하세요.

HTTP 에이전트 응답으로 반환되는 JSON 샘플:

{
    "body": {
        "coord": {
            "lon": 40.01,
            "lat": 56.11
        },
        "weather": [{
            "id": 801,
            "main": "Clouds",
            "description": "few clouds",
            "icon": "02n"
        }],
        "base": "stations",
        "main": {
            "temp": 15.14,
            "pressure": 1012.6,
            "humidity": 66,
            "temp_min": 15.14,
            "temp_max": 15.14,
            "sea_level": 1030.91,
            "grnd_level": 1012.6
        },
        "wind": {
            "speed": 1.86,
            "deg": 246.001
        },
        "clouds": {
            "all": 20
        },
        "dt": 1526509427,
        "sys": {
            "message": 0.0035,
            "country": "RU",
            "sunrise": 1526432608,
            "sunset": 1526491828
        },
        "id": 487837,
        "name": "Stavrovo",
        "cod": 200
    }
}

다음 작업은 JSON에서 데이터를 추출하는 종속 아이템을 구성하는 것입니다.

  • 습도에 대한 샘플 종속 아이템을 구성합니다:

'온도'와 같은 다른 날씨 지표도 동일한 방식으로 추가됩니다.

  • JSONPath를 사용한 종속 아이템 값 전처리 샘플:

  • 최근 데이터에서 날씨 데이터 결과를 확인합니다:

예제 5

Nginx 상태 페이지에 연결하여 메트릭을 일괄적으로 가져옵니다.

  • 공식 가이드에 따라 Nginx를 구성합니다.
  • 일괄 데이터 수집을 위한 마스터 아이템을 구성합니다:

샘플 Nginx stub status 출력:

Active connections: 1 Active connections:
server accepts handled requests
 52 52 52 
Reading: 0 Writing: 1 Waiting: 0

다음 작업은 데이터를 추출하는 종속 아이템을 구성하는 것입니다.

  • 초당 요청 수에 대한 샘플 종속 아이템을 구성합니다:

  • 정규 표현식 server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+)을 사용한 샘플 종속 아이템 값 전처리:

  • 최신 데이터에서 stub 모듈의 완전한 결과를 확인합니다: