• EnglishEspañol日本語한국어Português
  • 로그인지금 시작하기

사용자의 편의를 위해 제공되는 기계 번역입니다.

In the event of any inconsistency between the English version and the translated version, the English versionwill take priority. Please visit this page for more information.

문제 신고

Kubernetes에서 실행되는 서비스 모니터링

Kubernetes에서 실행되고 적용 가능한 통합에서 지원되는 서비스가 있는 경우 Kubernetes 통합을 통해 해당 통합을 활성화할 수 있습니다.

시작하다

Kubernetes 통합은 일부 호스트 통합과 함께 번들로 제공됩니다. 이를 통해 매니페스트 내에서 ConfigMap으로 사용되는 Kubernetes 통합 구성에 섹션을 추가하여 해당 서비스에 대한 데이터를 얻을 수 있습니다.

Kubernetes PHP 방명록에서 실행되는 Redis를 모니터링하는 방법의 예는 이 튜토리얼 을 참조하십시오.

요구 사항

Kubernetes에서 실행되는 서비스를 모니터링하려면 다음이 필요합니다.

이 설치 방법의 경우 RabbitMQ 및 Apache 통합은 인벤토리 데이터를 보고하지 않습니다.

Helm 차트를 사용하여 서비스 모니터링 활성화

Kubernetes의 모니터링 서비스는 인프라 에이전트와 호스트 내 통합 및 자동 검색 메커니즘을 활용하여 지정된 선택기가 있는 포드를 가리키는 방식으로 작동합니다.

Kubernetes 통합을 활성화하여 하나 이상의 서비스를 모니터링하려면:

기본 구성 가져오기

다음 링크에서 K8에서 실행할 수 있는 통합을 위한 예제 구성 파일을 얻을 수 있습니다.

이러한 예의 대부분은 주로 특정 서비스에 대해 인증하는 데 필요한 자격 증명을 입력하기 위해 특정 환경에 대해 구성해야 한다는 점을 고려하십시오. 위의 드롭다운 에 링크된 통합별 페이지에서 각 통합을 자세히 구성하는 방법에 대해 자세히 알아볼 수 있습니다.

구성을 추가하십시오. values-newrelic.yaml

이 형식은 Kubernetes 통합 v3 에 적용됩니다. 이전 v2 버전의 경우 아래 섹션을 확인하세요.

작동하는 구성 스니펫은 다음 구조의 YAML 문서여야 합니다.

# Top level name can be arbitrary, akin to a config file name
redis-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의 인스턴스에 지정된 라벨과 일치하는 Pod가 없으면 해당 ### 인스턴스에서 통합이 실행되지 않습니다.

(레거시 v2) 구성 추가 values.yaml

통합이 작동하는지 확인

one.newrelic.com > All capabilities > Infrastructure로 이동하고 Third party services [타사 서비스를] 선택한 다음 서비스의 대시보드를 선택합니다. 보고되는 데이터가 표시되어야 합니다.

거기에 데이터가 표시되지 않으면 통합에 실행에 필요한 일부 매개변수가 누락되었거나 대상 서비스에 도달하지 못할 수 있습니다. 다음을 실행하여 통합 로그를 가져올 수 있습니다.

bash
$
kubectl logs -n newrelic newrelic-nrk8s-kubelet-xxxxx agent

통합이 타겟팅해야 하는 포드 옆에 예약된 nrk8s-kubelet DaemonSet의 특정 포드를 선택해야 합니다. 다음 명령을 실행하여 어떤 인스턴스가 어떤 노드에서 실행되고 있는지 확인할 수 있습니다.

bash
$
kubectl get pods -n newrelic -o wide -l app.kubernetes.io/component=kubelet

서비스 활성화에 대한 추가 참고 사항

  • 여러 서비스를 활성화하면 Kubernetes 통합 구성 파일의 리소스 제한에 설정된 것보다 더 많은 리소스를 사용할 수 있습니다. 이것이 문제가 되면 resources 섹션에서 한도를 높이세요.
  • Kubernetes 통합은 자동으로 업데이트되지 않습니다. 최상의 결과를 얻으려면 정기적으로 업데이트 하십시오.

더 알아보기

구성에 대한 추가 리소스:

매니페스트를 사용하여 서비스 모니터링 활성화

위 섹션 에 설명된 대로 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: nginx
integrations:
- name: nri-nginx
env:
STATUS_URL: http://${discovery.ip}/status
STATUS_MODULE: discover
METRICS: 1

위의 구성은 다음을 활성화합니다.

  • nri-discovery-kubernetes 을 실행하여 현재 있는 노드에 대한 데이터를 쿼리합니다.

  • 반환되는 데이터를 구문 분석하고 값이 nginxapp= 레이블이 있는 Kubernetes 컨테이너가 있는 Kubernetes 포드를 찾습니다.

  • 모든 일치 항목에 대해 NGINX 통합을 실행하려고 시도합니다. 상태 URL은 다음에서 빌드됩니다.

    • 포드의 IP 주소
    • 상태 페이지는 K8s 포드의 레이블에서 가져옵니다. status_url

이 자동 검색은 인프라 에이전트에서 사용하는 컨테이너 자동 검색 과 동일하게 작동합니다. 고급 옵션은 컨테이너 자동 검색 을 참조하세요.

Kubernetes 통합 구성에 서비스 YAML 추가

통합에서 위의 스니펫을 인식하려면 지정된 ConfigMap 내부에 배치해야 합니다. Kubernetes 통합 v3 을 사용하는 경우 이름이 -integrations-cfg 으로 끝나는 ConfigMap이 이미 생성되어 있어야 합니다. 구성 맵을 찾아 수정된 스니펫을 추가하면 다음과 같이 됩니다.

---
apiVersion: v1
kind: ConfigMap
metadata:
name: newrelic-infrastructure-integrations-cfg
namespace: newrelic
data:
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이 이미 필수 컨테이너에 탑재되어 있습니다.

중요

Kubernetes 통합 버전 2의 경우 ConfigMap의 모든 파일이 /etc/newrelic-infra/integrations.d/ 에 마운트되도록 DaemonSet specvolumesvolumeMounts 섹션에 이 ConfigMap에 대한 항목을 추가해야 합니다.

동일한 ConfigMap은 여러 구성 파일을 보유할 수 있으므로 매니페스트에 대한 수정을 최소한으로 유지하는 것이 좋습니다.

---
apiVersion: v1
kind: ConfigMap
metadata:
name: newrelic-infrastructure-integrations-cfg
namespace: newrelic
data:
nginx-config.yml: |
discovery: # ...
integrations:
- name: nri-nginx
# ...
redis-config.yml: |
discovery: # ...
integrations:
- name: nri-redis
# ...

보고된 데이터를 사용하는 방법

여기에서 Kubernetes 데이터를 찾고 사용하는 방법에 대해 자세히 알아볼 수 있으며 여기에서 K8sServiceSample 데이터 스키마를 검토할 수 있습니다.

Copyright © 2024 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.