Kubernetes 환경과 응용 프로그램의 상관성 추적

입문


본고는 Kubernetes의 유동 응용 프로그램 운행 환경에서 New Relic APM에서 응용 프로그램의 운행 정보를 추적하는 방법을 소개한다.

배경과 목적


Kubernetes 환경은 서비스 수요를 충족시키기 위해 유연한 자원 분배를 제공하고, Kubernetes 환경은 응용 프로그램의 운영 환경을 유동적으로 전환한다.
이 환경에서 추적 응용 프로그램의 오류는 오류의 내용을 추적해야 할 뿐만 아니라 응용 프로그램이 어디에서 실행되는지 정확하게 파악해야 한다.응용 프로그램의 운행 환경이 어느 호스트, 어느 용기, 어느 용기인지 파악하면 디버깅과 고장 제거를 신속하게 할 수 있다.
새 버전에서 기본 기능은 모니터링된 응용 프로그램이 실행되는 서버나 용기를 감지하는 것이지만 실시간 실행 정보일 뿐입니다.오류가 발생한 응용 프로그램이 반드시 10분 전, 30분 전의 고장 때와 같은 환경에 있는 것은 아니다.
그러나 Kuberenetes의 Downward API와 New Relic Agent API를 조합하여 Kubernetes의 제약층 정보(Pod, Host IP, Namespace etc...)를 사용자 정의 매개 변수로 New Relic APM Agent가 수집한 응용 프로그램의 도량을 부여할 수 있다.
이렇게 하면 오류 내용, 예를 들어 어떤 Pod, 어떤 호스트의 응용 프로그램에 오류가 발생했는지 기록하고 이해할 수 있습니다.
다음부터는 이 설정의 요소 기술을 설명하면서 흐르는 Kubernetes 환경에서 New Relic APM을 사용하는 탄력적인 경기 방법을 설명하고 싶습니다.
또한 Sample Application으로 New Relic의 Cray Smith를 사용하여 작성했습니다Node.js 응용 프로그램.

다운로드 API 정의


Kubernetes Downward API 용기가 운행하는 집단과 용기에 대한 정보를 얻을 수 있도록 합니다.Downward API는 환경 변수를 통해 용기에 용기 정보 등을 전달할 수 있습니다.
설정 방법은 프로그램 목록 파일의 env 부분에 환경 변수로 등록할 제약층에 대한 정보를 추가하는 것입니다.이번에 우리는 용기에 있는 응용 프로그램이 식별할 수 있도록 Kubernetes 노드 이름, 호스트 IP, 포드 이름, 포드 이름 공간, 포드 IP와 포드 서비스에 대한 정보를 보충할 것이다.
k8s/guestbook-all-in-one.yaml
        env:
        - name: K8S_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: K8S_HOST_IP
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
        - name: K8S_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: K8S_POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: K8S_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: K8S_POD_SERVICE_ACCOUNT
          valueFrom:
            fieldRef:
              fieldPath: spec.serviceAccountName

새 버전 프록시 API 설정


그런 다음 새 버전 프록시 API를 사용하여 사용자 정의 매개변수를 설정합니다.Sample Application는 Node입니다.js로 썼기 때문에 이번 기재 사용New Relic Node.js 프록시 API의 예입니다.
응용 프로그램 파일에 다음 코드를 추가하여 다운로드 API에 지정된 값을 모니터링된 응용 프로그램의 모든 트랜잭션 추적에 사용자 정의 매개 변수로 추가합니다.newrelic.addCustomParameters()는 Kuberenetes 메타데이터의 모든 express입니다.js 웹의 변환 (및 오류) 을 설명하는 데 사용됩니다.
node-redis/index.js
var CUSTOM_PARAMETERS = {
    'K8S_NODE_NAME': process.env.K8S_NODE_NAME,
    'K8S_HOST_IP': process.env.K8S_HOST_IP,
    'K8S_POD_NAME': process.env.K8S_POD_NAME,
    'K8S_POD_NAMESPACE': process.env.K8S_POD_NAMESPACE,
    'K8S_POD_IP': process.env.K8S_POD_IP,
    'K8S_POD_SERVICE_ACCOUNT': process.env.K8S_POD_SERVICE_ACCOUNT,
    'K8S_POD_TIER': process.env.K8S_POD_TIER
};

app.use(function(req, res, next) {
  newrelic.addCustomParameters(CUSTOM_PARAMETERS);
  next();
});

APM 오류 분석 오류 추적


위에서 설정한 응용 프로그램을 Kubernetes에 배치합니다.
APM Error Analytics 화면에서 잘못된 내용을 보면 Pod 정보와 호스트 정보를 속성으로 볼 수 있습니다.

또한 APM Error Profile은 다양한 속성을 사용하여 기계 학습을 통해 오류의 특이 분포를 자동으로 구성합니다.이것은 Kubernetes의 특정 패키지나 호스트에서 얼마나 많은 오류가 발생했는지 보여 줍니다.


이러한 매개 변수는 응용 프로그램 오류 시 인프라 및 클러스터에서 발생하는 오류를 신속하게 파악할 수 있도록 도와줍니다.

INSIGHTS NRQL을 사용하여 차트 그리기


그런 다음 새 버전 대시보드 서비스 INSIGHTS를 사용하여 차트를 그립니다.
INSIGHTS에서는 APM 에이전트를 통해 전송되는 사용자 정의 매개변수가 있는 메트릭에 따라 NRQL이라는 명령을 사용하여 차트를 그릴 수 있습니다.
예를 들어 모든 방송 이름의 응용 프로그램 사무 처리 성능을 보려면 Insights에서 다음 사용자 정의 NRQL (새 버전Query Language) 조회를 실행하면 도표를 그릴 수 있다.
NRQL
SELECT percentile(duration, 95) from Transaction where appName='newrelic-k8s-node-redis' and name='WebTransaction/Expressjs/GET//'FACET K8S_POD_NAME TIMESERIES auto

번외INFRASTURCTURE에서도 Kubernetes 모니터링


이 게시물의 주요 내용과 달리 새 버전에는 리소스 모니터링 서비스인 INFRASTRUCTURE가 포함되어 있습니다.Kubernetes의 Master와 Worker 호스트는 물론 컨테이너 단위로 모니터링할 수 있습니다.Daemonset을 사용하면 각 호스트를 자동으로 설치할 수 있습니다.단계는 다음과 같다.

①. kubernetesgit 설치


$ git clone https://github.com/kubernetes/kubernetes.git

②. 새 Relic INFRASTRUCTURE 구성

$ cd kubernetes/examples/newrelic-infrastructure/
$ vi nrconfig.env
  #--REQUIRED--
  # Put your license key in this variable
  export NRIA_LICENSE_KEY=“自身のNew Relic ライセンスキー”

③. kubernets에서 config 만들기

$cp newrelic-config-template.yaml newrelic-config.yaml
$kubectl create -f newrelic-config.yaml

④. Daemonset 만들기

$ kubectl create -f newrelic-infra-daemonset.yaml

⑤. INFRASTRUCTURE 화면에서 확인


새 Relic INFRASTRUCTURE 화면에서 호스트가 표시되는지 확인합니다.

그런 다음 프로세스 탭에서 호스트의 각 컨테이너에 대한 리소스 상태를 확인합니다."GROUP BY"기능에서 containerName을 지정하면 용기 단위로 도표를 그릴 수 있습니다.


번외INSIGHTS에서 Kubernetes 통합 대시보드 만들기


본고의 본문 설명과는 다르지만 New Relic INSIGHTS의 대시보드 기능을 통해 지금까지 가시화된 Kubernetes의 감시 정보를 한 폭의 그림에 모아 보여주고 싶습니다.
INSIGHTS는 Kuberenetes 환경의 호스트와 용기 단위의 자원 사용 상황, 이 환경에서 실행되는 응용 프로그램의 도량, Pod 단위의 Error 수 등 Kuberenetes의 다양한 층에 대한 정보를 집중적으로 표시합니다.
INFRASTRUCTURE에서 Kubernetes 환경에서 호스트와 용기의 자원 사용 상황을 가져오고, APM에서 이 Kubernetes 환경에서 실행되는 응용 프로그램의 다양한 도량을 가져오며, INSIGHTS를 사용하는 NRQL을pod명 단위로 표시하는 오류 도량을 도형화하여 대시보드에 배치합니다.

끝내다


새 버전에서 Kubernetes의 응용 프로그램 오류 추적에서 파생된 용기와 호스트 자원 모니터링, 그것들을 집중적으로 가시화하는 계기판을 설명합니다.단일 환경과 다른 모니터링 방법이 필요한 Kuberenetes 환경에서 새로운 버전이 이 환경을 모니터링하는 데 도움을 줄 수 있기를 바랍니다.

좋은 웹페이지 즐겨찾기