mackerel-container-agentを追加する | IDCFクラウド コンテナ ご利用ガイド

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リソースを作成

  1. 以下の手順でMackerelのAPIキーを確認します。
  • ダッシュボードから詳細をクリック

  • APIタブから新しいAPIキーを作成するかデフォルトのAPIキーを確認

  1. 確認した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は下記リソースを参照します。

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イメージが公開されています。pluginslatest に、vX.Y.Z-pluginsvX.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

詳細はエージェントの設定をご確認ください。

また、利用するメトリックによってエージェントの設定およびアプリケーションの設定は異なりますので、各プラグインのドキュメントをご確認ください。