• 로그인지금 시작하기

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

영문본과 번역본이 일치하지 않는 경우 영문본이 우선합니다. 보다 자세한 내용은 를 방문하시기 바랍니다.

문제 신고

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

New Relic의 Kubernetes 통합을 사용하면 Kubernetes와 Cassandra, Redis, MySQL 및 기타 지원 서비스 와 같이 Kubernetes에서 실행되는 서비스를 모두 모니터링할 수 있습니다.

시작하다

Kubernetes 통합은 일부 온호스트 통합 (예: Cassandra, MySQL 및 Apache)과 함께 번들로 제공됩니다. 이를 통해 매니페스트 내에서 ConfigMap으로 존재하는 Kubernetes 통합의 구성에 섹션을 추가하여 지원되는 서비스에 대한 데이터를 얻을 수 있습니다.

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

필요한 것

Kubernetes에서 실행되는 서비스를 모니터링하려면 Kubernetes 통합 버전 1.16.0 이상( install | check version | update )을 실행하는 Kubernetes 클러스터만 있으면 됩니다.

Kubernetes에서 실행되는 다음 서비스를 지원합니다.

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

Kubernetes의 모니터링 서비스는 표준 On-Host 통합 및 자동 검색 메커니즘을 활용하여 지정된 선택기가 있는 포드를 가리키도록 하여 작동합니다.

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의 인스턴스에 지정된 레이블과 일치하는 포드가 없으면 해당 인스턴스에서 통합이 실행되지 않습니다.

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

통합이 작동하는지 확인

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

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

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
# ...
Copyright © 2023 New Relic Inc.

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