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によって可視化します。
やり方
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つです。
- 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"
- 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のクエリで必要なデータを抽出し、可視化、アラートの設定をします。以下は収集したメトリクスを可視化した例になります。
本日はKubernetes上のシステムのメトリクスをPrometheusで収集し、New Relicに統合するところを紹介しました。まだまだNew Relicは触って1ヶ月程度でありますが、色々とやれることが多く楽しいです。これからどんどん使いこなして行きたいと思います。
最後までご覧いただき、ありがとうございました!