3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

New RelicAdvent Calendar 2019

Day 21

Kubernetes上のシステムのメトリクスをPrometheusで収集し、New Relicに統合してみる

Last updated at Posted at 2019-12-23

New Relic Advent Calendar 2019の21日目の投稿になります。(体調不良で投稿が随分遅れてしまいました。。)

はじめに

弊社のプロダクトではデータ転送の基盤をKubernetes(EKS)で構築しております。
データ転送は Jobs で行っております。

インフラやアプリケーションのモニタリングにはNew Relicを利用しています。メトリクスの収集にはPrometheusを使用しています。

今回はKubernetes上のシステムのメトリクスをPrometheusで収集し、New Relicに統合するところまでを紹介したいと思います。

Prometheusとnew relicの連携について

KubernetesとNew Relicの連携はNew Relic Prometheus OpenMetricsを利用します。
監視対象のPrometheusエンドポイントを自動的に識別し、メトリックを収集を可能にするものです。収集したメトリクスはNew Relic Insightsによって可視化します。

prometheus-kubernetes.png

やり方

Kubernetes上にNew Relic Prometheus OpenMetricsを導入する方法としてはこちらを参照してください。

基本的にはNew Relicが提供しているmanifest fileにNew Relicのライセンスキーやクラスタ名を入力し、applyするだけで導入可能です。

導入が完了すると下記のようにNew Relic Prometheus OpenMetricsのPod(nri-prometheus-78888747d7-gxkrd)が立ち上がります。

kubectl get pod -n kube-system
NAME                                 READY   STATUS    RESTARTS   AGE
aws-node-j825j                       1/1     Running   0          63m
aws-node-qmr56                       1/1     Running   0          4m
cluster-autoscaler-779c8bfb8-zvcxx   1/1     Running   0          25m
coredns-57db5788d5-968pj             1/1     Running   0          25m
coredns-57db5788d5-nrjpk             1/1     Running   0          25m
fluentd-7ft2n                        1/1     Running   0          63m
fluentd-p48g5                        1/1     Running   0          3m40s
kube-proxy-cktvq                     1/1     Running   0          63m
kube-proxy-htwgh                     1/1     Running   0          4m
kube-state-metrics-d6c99df65-9p8qk   2/2     Running   0          25m
nri-prometheus-78888747d7-gxkrd      1/1     Running   0          25m

収集対象のPrometheusエンドポイントを識別させる方法は主には2つです。

  1. Deploymentにラベルを与えることで自動で識別させる

下記のようにDeploymentのtemplateのlabelに prometheus.io をあたえることで識別可能になります。下記の例では9394ポートのmetricsにアクセスすることでメトリクス収集が可能になるように設定しています。

apiVersion: apps/v1
kind: Deployment
spec:

  ・
  ・
  ・

  template:
    metadata:
      labels:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9394"
        prometheus.io/path: "metrics"
  1. PrometheusエンドポイントのURLをconfigのターゲットに設定する。

New Relic Prometheus OpenMetricsのmanifestファイルのconfig.yaml内に固定URLを設定可能な項目があるので、そこにエンドポイントの情報を記載する

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nri-prometheus


・
・
・

apiVersion: v1
data:
  config.yaml: |

    ・
    ・
    ・

    targets:
      - description: trocco app
        urls: ["http://sample.com:9394/metrics", "http://sample.com:9100/metrics"]

こうすることでPrometheusで収集したメトリクスをNew Relicに連携することが可能になります。

収集したメトリクスの可視化

収集したメトリクスはNew Relic Insightによって可視化が可能です。
NRQLのクエリで必要なデータを抽出し、可視化、アラートの設定をします。以下は収集したメトリクスを可視化した例になります。

スクリーンショット 2019-12-23 22.08.59.png

本日はKubernetes上のシステムのメトリクスをPrometheusで収集し、New Relicに統合するところを紹介しました。まだまだNew Relicは触って1ヶ月程度でありますが、色々とやれることが多く楽しいです。これからどんどん使いこなして行きたいと思います。

最後までご覧いただき、ありがとうございました!

3
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?