mackerel-container-agentを追加する
はじめに
mackerel-container-agentを利用し、PodのCPU使用量、メモリ使用量、ネットワーク通信量のメトリックをMackerelから監視することができます。
MackerelによるPod監視では、1Podに対して1マイクロホストとしてMackerelに登録されます。
Podのサイドカーとしてmackerel-container-agentを動作させることで監視対象ホストとして登録できます。監視したいPodのマニフェストにmackerel-container-agentを追加し、IDCFクラウドコンテナ上にデプロイすることでPodの監視を行います。
取得可能なメトリック等の詳細はMackerelのページをご確認ください。 (コンテナオーケストレーションプラットフォームはKubernetesが該当します。)
Mackerelへのホスト(Pod)の登録方法の確認
- ホストページの「ホストを新規登録する」をクリック
- 「コンテナ環境 > Kubernetes」からMackerelを用いた設定方法を表示
IDCFクラウドコンテナでのPod監視のセットアップ
IDCFクラウドコンテナ上で利用するために必要な設定を説明します。
監視を行いたい対象マニフェスト内のPodテンプレートにmackerel-container-agentコンテナを追加します。
mackerel-container-agentコンテナの設定は「Pod Templateにコンテナを追加する」を参考に行ってください。
mackerel-container-agentはデフォルトでkubeletのread-only-portにアクセスする設定になっていますが、 IDCFクラウドコンテナではread-only-portが無効となっているため環境変数およびRoleの設定変更が必要となります。
環境変数の設定
mackerel-container-agentをIDCFクラウドコンテナ上で利用するために必要な環境変数の設定を説明します。
以下の環境変数をPodテンプレートのmackerel-container-agentコンテナ上で定義してください。
MACKEREL_CONTAINER_PLATFORM
:kubernetes
MACKEREL_APIKEY
: 以下の例のようにSecretリソースを作成し参照valueFrom: secretKeyRef: name: mackerel key: apikey
MACKEREL_KUBERNETES_KUBELET_INSECURE_TLS
: 任意の値MACKEREL_KUBERNETES_KUBELET_PORT
(デフォルト: 10255) へのkubelet APIアクセスの際に証明書の検証を行いません
MACKEREL_KUBERNETES_KUBELET_READ_ONLY_PORT
:0
0
を設定することでkubeletのread-only portの利用を中止します
その他の環境変数の設定については以下ページをご確認ください。
MackerelのAPIキーを持つSecretリソースを作成
- 以下の手順でMackerelのAPIキーを確認します。
ダッシュボードから詳細をクリック
APIタブから新しいAPIキーを作成するかデフォルトのAPIキーを確認
- 確認したAPIキーを用いて、以下の例のようなSecretリソースを作成します。
apiVersion: v1
kind: Secret
metadata:
name: mackerel
type: Opaque
data:
apikey: <Mackerel API Key(base64 encoded)>
作成したSecretリソースは、mackerel-container-agentコンテナの環境変数として参照します。
Roleの設定
IDCFクラウドコンテナではread-only-portが無効となっているためkubeletで認証が必要となります。
mackerel-container-agentは下記リソースを参照します。
resource | verb |
---|---|
nodes/proxy | get |
nodes/stats | get |
mackerel-container-agentがこれらのリソースを参照できるようにServiceAccountおよびRoleの設定が必要となります。 ServiceAccountを作成し、これらリソースへのアクセス権をもったRoleを紐づけ、Podのマニフェストから指定します。
▼ ServiceAccountマニフェスト例
apiVersion: v1
kind: ServiceAccount
metadata:
name: sample-serviceaccount
namespace: default
▼ Roleマニフェスト例
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: mackerel-container-agent-clusterrole
rules:
- apiGroups:
- ""
resources:
- nodes/proxy
- nodes/stats
verbs:
- get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: sample-clusterrolebinding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: mackerel-container-agent-clusterrole
subjects:
- kind: ServiceAccount
name: sample-serviceaccount
namespace: default
マニフェスト例
nginxのデプロイメントのPodテンプレートにmackerel-container-agentコンテナを追加しているマニフェストのサンプルです。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
serviceAccountName: sample-serviceaccount
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
- name: mackerel-container-agent
image: mackerel/mackerel-container-agent:latest
imagePullPolicy: Always
resources:
limits:
memory: 128Mi
env:
- name: MACKEREL_CONTAINER_PLATFORM
value: kubernetes
- name: MACKEREL_APIKEY
valueFrom:
secretKeyRef:
name: mackerel
key: apikey
- name: MACKEREL_KUBERNETES_KUBELET_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: MACKEREL_KUBERNETES_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MACKEREL_KUBERNETES_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MACKEREL_KUBERNETES_KUBELET_INSECURE_TLS
value: "TRUE"
- name: MACKEREL_KUBERNETES_KUBELET_READ_ONLY_PORT
value: "0"
監視を開始
mackerel-container-agentの設定を追加したマニフェストをデプロイすることで監視が開始されます。
デプロイ後、正常にPod監視が始まるとMackerelホスト一覧画面にPodが認識され表示されます。
▼ Mackerelホスト一覧画面表示例
▼ IDCFコンテナコンソール上のPod例
プラグインの使用
mackerel-container-agentはデフォルトではPodのCPU、メモリ、ネットワークのメトリックを取得します。これに加えてアプリケーション固有のメトリックを取得するにはプラグインを使用する必要があります。
プラグインを使用するために、mackerel-container-agentでは公式プラグインを同梱したDockerイメージが公開されています。plugins
は latest
に、vX.Y.Z-plugins
は vX.Y.Z
にプラグインを同梱したイメージとなります。
同梱されているメトリックプラグイン一覧は以下ページの「container-agent」の欄をご確認ください。
また、プラグインがメトリックを取得できるようにアプリケーションを実装しておく必要があります。プラグインを使用するための詳細な設定は、以下のページをご参考の上で行ってください。
設定ファイルの定義
プラグインを使用する場合、mackerel-container-agentの設定ファイルを定義し、プラグイン実行の設定を行う必要があります。
エージェントの設定ファイルのファイルパスは環境変数 MACKEREL_AGENT_CONFIG
で設定します。
指定パスにConfigMap等でエージェントの設定ファイルを配置します。 以下はConfigMapを用いて設定ファイルを配置する設定例です。(メトリックプラグイン - mackerel-plugin-nginxを使用する場合)
▼ ConfigMapマニフェスト例
apiVersion: v1
data:
mackerel.yaml: |-
plugin:
metrics:
nginx:
command: mackerel-plugin-nginx --port 80 --path /stub_status
kind: ConfigMap
metadata:
name: mackerel-agent-config
▼ Podマニフェスト例
# ...
spec:
containers:
# ...
- name: mackerel-container-agent
# ...
image: mackerel/mackerel-container-agent:plugins
env:
# ...
- name: MACKEREL_AGENT_CONFIG
value: "/etc/mackerel/mackerel.yaml"
volumeMounts:
- name: mackerel-agent-config-volume
mountPath: /etc/mackerel/
volumes:
- name: mackerel-agent-config-volume
configMap:
name: mackerel-agent-config
詳細はエージェントの設定をご確認ください。
また、利用するメトリックによってエージェントの設定およびアプリケーションの設定は異なりますので、各プラグインのドキュメントをご確認ください。