Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

AKSで構築したKubernetesクラスタをElasticStackで監視する (2)AutoDiscover編

こんにちは、アキバです。

前回に引き続き、Azure Kubernetes Service(AKS)を用いて作成した Kubernetesk8sクラスタを ElasticStack で監視する方法について解説します。

第2回の今回は、k8s でデプロイしたコンテナ上で動くミドルウェアの監視を行う方法についてです。

※今回の記事の内容は、ほぼ AKS に依存しません。 kubectl が使える環境なら、どの k8s クラスタでも適用できるでしょう

1.監視対象の構成

監視対象である AKS の Vote サンプルアプリケーションは、以下のような構成で動いています。

Voteアプリケーション構成

Metricbeat には、Redis などのメトリックを監視するためのモジュールが用意されているため、 k8s クラスタでも同じように監視したいと思います。

2.AutoDiscover機能を使う

k8s のように動的にコンテナが起動・終了するようなシステムの場合、起動したコンテナに追従して Filebeat/Metricbeat を設定する必要があります。

前回の記事で、 k8s クラスタの Pod の監視には、DaemonSet という k8s の仕組みで実現できることを学びました。

しかしながら、DaemonSet で起動した Filebeat/Metricbeat は、自分の監視する Pod 上でどのツールが動いているかを知らなければモジュールを適用することができません。

Filebeat/Metricbeat には、 Autodiscover という機能があり、これを利用することで動的に増減するコンテナに追従可能になります。

例として、 Redis が動く azure-vote-back のコンテナに対して Metricbeat の redis モジュールを適用します。

前回 DaemonSet として登録する際に使用した、 metricbeat-kubernetes.yaml ファイルに、コメントアウトされた状態の記述があるので、このコメントを外して設定を追記します。

■設定前:

    # To enable hints based autodiscover uncomment this:
    #metricbeat.autodiscover:
    #  providers:
    #    - type: kubernetes
    #      host: ${NODE_NAME}
    #      hints.enabled: true

■設定後:

    # To enable hints based autodiscover uncomment this:
    metricbeat.autodiscover:
      providers:
        - type: kubernetes
          host: ${NODE_NAME}
          #hints.enabled: true
          templates:
            - condition.equals:
                kubernetes.labels.app: azure-vote-back
              config:
                - module: redis
                  metricsets: ["info", "keyspace"]
                  period: 10s
                  hosts: ["${data.host}:6379"]

上記の例では、「kubernetes.labels.app」という k8s のメトリックで得られるフィールドを見て、「azure-vote-back」だったら redis モジュールを適用するようにしています。 この「condition.equals」をシステムに合わせて設定すれば、その他のモジュールやコンテナへの適用にも応用できるわけです。

3.適用=DaemonSet を更新する

それでは、変更した設定を k8s の DaemonSet に適用します。

既に適用されている DaemonSet がある場合は、削除してから再度適用します。

$ kubectl delete -f metricbeat-kubernetes.yaml
$ kubectl create -f metricbeat-kubernetes.yaml

適用されました。

f:id:acro-engineer:20190730024152p:plain

余談ですが、このダッシュボードは、 Metricbeat からセットアップしたものです。

構築した Kibana サーバに Metricbeat をインストールし、設定後に以下のコマンドで投入しています。(※SSHコンソール上で操作)

$ metricbeat setup --dashboards

まとめ

以上の内容で、 k8s クラスタ上で動的に作成/削除されるコンテナに対して、その種類を見ながら必要なモジュールを適用できることがわかりました。

今回は Redis のみを対象にしましたが、 nginx のメトリックや、あるいは Filebeat を使ってアプリケーション独自のログを監視するといったことも可能になりますので、興味のある方はチャレンジしてみてはいかがでしょうか?

次回は、最後に Elastic APM をアプリケーションに適用してみます。

それでは。

参考文献


Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

  少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップの求人 - Wantedlywww.wantedly.com