16 HTTP 에이전트

원본 보기

16 HTTP agent

개요

이 아이템 유형은 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 아이템을 구성하려면:

  • 이동: 데이터 수집호스트
  • 호스트 행에서 아이템을 클릭
  • 아이템 생성을 클릭
  • 폼에 아이템의 매개변수를 입력

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

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

매개변수 설명
유형 여기서 HTTP 에이전트를 선택합니다.
고유한 아이템 키를 입력합니다.
URL 연결하여 데이터를 가져올 URL입니다. 예:
https://www.example.com
http://www.example.com/download
도메인 이름은 유니코드 문자로 지정할 수 있습니다. HTTP 확인 실행 시 자동으로 punycode로 변환되어 ASCII로 됩니다.
파싱 버튼을 사용하여 URL에서 선택적 쿼리 필드(?name=Admin&password=mypassword 같은)를 분리하고, 속성과 값을 자동 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 인증 인증 옵션을 선택합니다:
없음 - 인증 사용 안 함;
Basic - 기본 인증 사용;
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 서버로 전송된 데이터를 수신합니다. 데이터 전송에 대한 자세한 정보는 트래퍼 아이템을 참조하세요.
허용된 호스트 트래핑 활성화 체크박스가 표시된 경우에만 보입니다.
IP 주소(선택적으로 CIDR 표기법) 또는 DNS 이름의 쉼표로 구분된 목록입니다.
지정된 경우 여기 나열된 호스트에서만 들어오는 연결을 허용합니다.
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에서 사용 중단되었습니다.
예: 127.0.0.1, 192.168.1.0/24, 192.168.3

예시

예제 1

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

  • URL로 GET 항목을 생성합니다: localhost:9200/?pretty
  • 응답을 확인합니다:
    {
      "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
예제 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 모듈의 완전한 결과를 확인합니다:

다음 단계는?