Kubernetes에서 실행되고 적용 가능한 통합에서 지원되는 서비스가 있는 경우 Kubernetes 통합을 통해 해당 통합을 활성화할 수 있습니다.
시작하다
Kubernetes 통합은 일부 통합 호스트 통합과 함께 번들로 제공됩니다. 이를 통해 매니페스트 내부에 ConfigMap
로 존재하는 Kubernetes 통합 설정에 섹션을 추가하여 해당 서비스에 대한 데이터를 얻을 수 있습니다.
Kubernetes PHP 방명록에서 실행되는 Redis를 모니터링하는 방법의 예는 이 튜토리얼 을 참조하십시오.
요구 사항
Kubernetes에서 실행되는 서비스를 모니터링하려면 다음이 필요합니다.
요구 사항을 충족하는 Kubernetes에서 실행되는 지원 서비스입니다. 지원되는 서비스는 다음과 같습니다.
이 설치 방법의 경우 RabbitMQ 및 Apache 통합은 인벤토리 데이터를 보고하지 않습니다.
Helm 차트를 사용하여 서비스 모니터링 활성화
Kubernetes의 모니터링 서비스는 인프라 에이전트와 호스트 내 통합 및 자동 검색 메커니즘을 활용하여 지정된 선택기가 있는 포드를 가리키는 방식으로 작동합니다.
버전 2에 대한 설정 예를 참조하세요.
Kubernetes 통합을 활성화하여 하나 이상의 서비스를 모니터링하려면:
기본 구성 가져오기
다음 링크에서 K8에서 실행할 수 있는 통합을 위한 예제 구성 파일을 얻을 수 있습니다.
이러한 예의 대부분은 주로 특정 서비스에 대해 인증하는 데 필요한 자격 증명을 입력하기 위해 특정 환경에 대해 구성해야 한다는 점을 고려하십시오. 위의 드롭다운 에 링크된 통합별 페이지에서 각 통합을 자세히 구성하는 방법에 대해 자세히 알아볼 수 있습니다.
구성을 추가하십시오. values-newrelic.yaml
팁
이 형식은 Kubernetes 통합 v3 에 적용됩니다. 이전 v2 버전의 경우 Kubernetes에서 실행되는 서비스 모니터링을 참조하세요.
작동하는 구성 스니펫은 다음 구조의 YAML 문서여야 합니다.
# Top level name can be arbitrary, akin to a config file nameredis-sampleapp.yaml: # Discovery section will define which pods will be monitored. discovery: command: # nri-discovery-kubernetes is a tool that connects to the Kubelet to fetch local pods # without putting stress in the API Server. It accepts the following arguments: # --namespaces: Comma separated namespaces to limit discovery on # --tls: Use tls for connecting to the kubelet # --port: Port used to connect to the kubelet. Defaults to 10255. exec: /var/db/newrelic-infra/nri-discovery-kubernetes --tls --port 10250 # Monitor pods which have a `app=sampleapp` label match: label.app: sampleapp
# Integrations section contains the integration configs. # ${placeholders} will be replaced with the specified attributes for each pod that is discovered integrations: - name: nri-redis # Integration name, should not be changed env: # Using the discovered pod IP as the hostname address HOSTNAME: ${discovery.ip} PORT: 6379 # Other integration options go here
이 스니펫은 values-newrelic.yaml
파일의 newrelic-infrastructure
아래에 있는 integrations
섹션에 추가해야 합니다. 예를 들어:
global: licenseKey: _YOUR_NEW_RELIC_LICENSE_KEY_ cluster: _K8S_CLUSTER_NAME_
# Other settings...
newrelic-infrastructure: # verboseLog: true integrations: redis-sampleapp.yaml: discovery: command: # --namespaces: Comma separated list of namespaces to discover pods on # --port: Port used to connect to the kubelet. Default is 10255 # --tls: Use secure (TLS) connection exec: /var/db/newrelic-infra/nri-discovery-kubernetes --tls --port 10250 match: label.app: sampleapp
integrations: - name: nri-redis env: HOSTNAME: ${discovery.ip} PORT: 6379
팁
--tls --port 10250
지정하고 있습니다. 이전 버전의 통합은 이 기능 없이도 작동했을 수 있습니다. Kubernetes 통합 버전 3 부터는 이를 지정하는 것이 필수입니다. 이러한 변경의 이유는 이제 통합이 localhost
대신 nodeIP를 사용하여 Kubelet에 연결되기 때문입니다. 전자에는 TLS가 필요하지만 후자에는 필요하지 않습니다.
다른 포드를 대상으로 하는 통합은 redis-sampleapp.yaml
옆에 자체 섹션이 있어야 합니다.
통합은 독립 실행형 바이너리이며 newrelic-nrk8s-kubelet-xxxxx
패드에 포함된 에이전트 에이전트에 의해 실행됩니다. 구성 파일은 nrk8s-kubelet
DaemonSet의 모든 파드에 구현, 배포되지만 검색을 통해 각 파드가 해당 특정 nrk8s-kubelet
파드와 동일한 노드에 예약된 목표 서비스 파드만 포함하도록 보장됩니다. nrk8s-kubelet
DaemonSet의 포함에 지정된 레이블과 일치하는 패드가 없으면 해당 ###
에 의해 통합이 실행되지 않습니다.
통합이 작동하는지 확인
one.newrelic.com > All capabilities > Infrastructure 으로 이동하여 Third party services 선택한 다음 서비스의 대시보드를 선택합니다. 보고되는 데이터가 표시되어야 합니다.
거기에 데이터가 표시되지 않으면 통합에 실행에 필요한 일부 매개변수가 누락되었거나 대상 서비스에 도달하지 못할 수 있습니다. 다음을 실행하여 통합 로그를 가져올 수 있습니다.
$kubectl logs -n newrelic newrelic-nrk8s-kubelet-xxxxx agent
통합이 타겟팅해야 하는 포드 옆에 예약된 nrk8s-kubelet
DaemonSet의 특정 포드를 선택해야 합니다. 다음 명령을 실행하여 어떤 인스턴스가 어떤 노드에서 실행되고 있는지 확인할 수 있습니다.
$kubectl get pods -n newrelic -o wide -l app.kubernetes.io/component=kubelet
서비스 활성화에 대한 추가 참고 사항
- 여러 서비스를 활성화하면 Kubernetes 통합 구성 파일의 리소스 제한에 설정된 것보다 더 많은 리소스를 사용할 수 있습니다. 이것이 문제가 되면
resources
섹션에서 한도를 높이세요. - Kubernetes 통합은 자동으로 업데이트되지 않습니다. 최상의 결과를 얻으려면 정기적으로 업데이트하세요.
더 알아보기
구성에 대한 추가 리소스:
- 구성 작동 방식에 대한 기술적인 세부 정보를 알아보세요.
- 동일한 구성 파일로 여러 서비스의 모니터링을 구성 하는 방법을 알아봅니다.
- Kubernetes에서 Redis 서비스를 모니터링하는 방법을 보여주는 단계별 자습서를 참조하십시오.
매니페스트를 사용하여 서비스 모니터링 활성화
팁
위 섹션 에 설명된 대로 values-newrelic.yaml
파일 및 Helm 차트를 통해 통합을 구성하는 것이 좋습니다. 매니페스트 설치 위에 서비스 모니터링을 구성하는 것은 훨씬 더 어렵고 어떠한 이점도 제공하지 않습니다.
모니터링하려는 각 서비스에 대해 해당 통합에 대한 구성 파일을 Kubernetes 통합의 구성에 추가해야 합니다. 이 문서에서는 다음 주제를 다룹니다.
서비스별 YAML 구성 작동 방식
Kubernetes 통합 설정은 ConfigMap
형식을 따릅니다. ConfigMap
을 사용하면 Kubernetes 이미지에서 통합 설정을 분리할 수 있습니다. 또 다른 이점은 실행 중인 컨테이너를 다시 로드하지 않고도 ConfigMap
자동으로 업데이트할 수 있다는 것입니다.
인프라 에이전트는 YAML을 사용하여 연결된 통합을 구성하므로 ConfigMaps
은 YAML을 저장하는 데 적합합니다. (구성 파일 형식에 대한 자세한 내용은 통합 구성 파일 형식 을 참조하십시오.)
Kubernetes 통합 이미지는 단일 구성 파일을 사용하여 여러 서비스 인스턴스의 구성을 단순화하는 자동 검색 기능 과 함께 제공됩니다. 예를 들어 여러 NGINX 인스턴스를 실행 중인 경우 모든 인스턴스에 대해 NGINX 통합 구성 파일 을 만드는 것은 구현하기 어렵고 업데이트하기 어렵습니다. 자동 검색 옵션을 사용하면 단일 구성 파일로 모든 NGINX 인스턴스를 검색하고 모니터링할 수 있습니다.
각 통합에는 고유한 특정 구성 YAML 이 있습니다. NGINX 통합 기본 구성 파일은 다음과 같습니다.
discovery: command: # Use the following optional arguments: # --namespaces: Comma separated list of namespaces to discover pods on # --port: Port used to connect to the kubelet. Default is 10255 # --tls: Use secure (TLS) connection # Custom Example: # exec: /var/db/newrelic-infra/nri-discovery-kubernetes --namespaces namespace1,namespace2 --port 10250 --tls # Default exec: /var/db/newrelic-infra/nri-discovery-kubernetes --tls --port 10250 match: label.app: nginxintegrations: - name: nri-nginx env: STATUS_URL: http://${discovery.ip}/status STATUS_MODULE: discover METRICS: 1
위의 구성은 다음을 활성화합니다.
nri-discovery-kubernetes
을 실행하여 현재 있는 노드에 대한 데이터를 쿼리합니다.반환되는 데이터를 구문 분석하고 값이
nginx
인app=
레이블이 있는 Kubernetes 컨테이너가 있는 Kubernetes 포드를 찾습니다.모든 일치 항목에 대해 NGINX 통합을 실행하려고 시도합니다. 상태 URL은 다음에서 빌드됩니다.
- 포드의 IP 주소
- 상태 페이지는 K8s 포드의 레이블에서 가져옵니다.
status_url
이 자동 검색은 인프라 에이전트에서 사용하는 컨테이너 자동 검색 과 동일하게 작동합니다. 고급 옵션은 컨테이너 자동 검색 을 참조하세요.
Kubernetes 통합 구성에 서비스 YAML 추가
위 스니펫을 지정된 ConfigMap
내부에 배치하면 통합에서 위 스니펫을 인식합니다. Kubernetes 통합 v3을 사용하는 경우 이름이 -integrations-cfg
로 끝나는 ConfigMap
이 이미 존재해야 합니다.
Kubernetes 통합 버전 2를 사용하는 경우 서비스 YAML 추가를 참조하세요.
구성 맵을 찾아 수정된 스니펫을 추가하면 다음과 같이 표시됩니다.
---apiVersion: v1kind: ConfigMapmetadata: name: newrelic-infrastructure-integrations-cfg namespace: newrelicdata: nginx-config.yml: | discovery: command: # Use the following optional arguments: # --namespaces: Comma separated list of namespaces to discover pods on # --port: Port used to connect to the kubelet. Default is 10255 # --tls: Use secure (TLS) connection # Custom Example: # exec: /var/db/newrelic-infra/nri-discovery-kubernetes --namespaces namespace1,namespace2 --port 10250 --tls # Default exec: /var/db/newrelic-infra/nri-discovery-kubernetes --tls --port 10250 match: label.app: nginx integrations: - name: nri-nginx env: STATUS_URL: http://${discovery.ip}/status STATUS_MODULE: discover METRICS: 1
Kubernetes 통합 v3을 사용하는 경우 이 ConfigMap
필수 컨테이너에 이미 마운트되어 있습니다.
동일한 ConfigMap
에는 여러 구성 파일이 포함될 수 있으므로 매니페스트 수정을 최소한으로 유지하는 것이 좋습니다.
---apiVersion: v1kind: ConfigMapmetadata: name: newrelic-infrastructure-integrations-cfg namespace: newrelicdata: nginx-config.yml: | discovery: # ... integrations: - name: nri-nginx # ... redis-config.yml: | discovery: # ... integrations: - name: nri-redis # ...
보고된 데이터를 사용하는 방법
여기에서 Kubernetes 데이터를 찾고 사용하는 방법에 대해 자세히 알아볼 수 있으며 여기에서 K8sServiceSample 데이터 스키마를 검토할 수 있습니다.