投稿者:原

私どものAIOps担当では、システム運用を効率化・高度化するため、機械学習の技術を採用した「AIOps」・アプリケーションパフォーマンス管理の「APM」といった製品の、ご提案から構築・導入後の支援まで担当しています。
AIOps担当からは、APM製品である IBM Observability by Instana(以下、Instana) を数回にわたってご紹介していきます。
本ブログは第2回目となります。

第1回目ではInstanaの特徴・機能についてご紹介いたしました。
第1回目ブログ:APMで監視を高度化。IBM Observability by Instana とは

Instanaはエージェント型の監視ソリューションで、エージェントからバックエンドと呼ばれる管理サーバへメトリクスデータを送信します。
エージェントから収集したデータを基にInstanaは様々な機能を提供します。

本ブログでは以下の特徴について実環境へのエージェント導入からどのような情報を得られるのかご紹介いたします。
・エージェントの機能により、サーバ上で稼働しているテクノロジーを自動的に検出し、メトリクスデータを収集
・アプリケーションのパフォーマンス収集およびアプリケーション間の依存関係を自動マッピング

※その他の特徴は第1回目ブログをご確認ください。

エージェントの導入手順紹介

導入準備

環境としてInstanaはSaaS版を用意いたしました。
監視対象はAWS環境上のEC2インスタンスへLinuxOSを導入。IBM Cloud上のKubernetesクラスタ(IBM Kubernetes Service)を用意いたしました。
監視対象はインターネットへ接続可能であることを前提としております。
※クローズドネットワークにおいてもオンプレミス版のInstanaの構築、監視対象のエージェント用にはインストールパッケージを持ち込むことでご利用可能です。

監視対象ではサンプルアプリケーションを稼働させております。
・Linuxサーバ:Tomcat上で簡単なサンプルアプリケーションを稼働
・Kubernetesクラスタ:サンプルマイクロサービス(sock-shop※)を稼働
※sock-shopについてはこちらを参照ください

これらの環境へエージェントを導入し、どのような情報を得ることができるのかご紹介いたします。

エージェント導入

エージェントの導入は非常に簡単です。数ステップの手順を踏むだけで導入が完了いたします。
エージェントを導入する際にバックエンドへの接続情報(URL,Port)、エージェントキーを指定しますが、Instanaのインストール支援画面にてあらかじめ設定されたコマンドやマニフェストファイルが提供されます。

Linuxへのエージェント導入

Linuxへ導入した際はSystemdのUnitとしてエージェントが設定されます。

  1. Instana管理画面のメニューより[Agents] > [Installing Instana Agents]をクリックします。
    Linuxを選択すると、導入に必要なコマンドが出力されますので、コピーします。
    instana1_01.png

  2. 監視対象のLinuxサーバへログインし、コピーしたインストールコマンドを実行します。

# #!/bin/bash
# curl -o setup_agent.sh https://setup.instana.io/agent && chmod 700 ./setup_agent.sh && sudo ./setup_agent.sh -a [agent key] -t dynamic -e [backend url]
  1. エージェントの起動および起動確認を実行します。
# systemctl start instana-agent
# systemctl status instana-agent
● instana-agent.service - "Instana(tm) agent."
   Loaded: loaded (/usr/lib/systemd/system/instana-agent.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/instana-agent.service.d
           mqcustom-environment.conf
   Active: active (running) since Thu 2021-08-02 03:10:28 UTC; 23h ago
 Main PID: 17013 (java)
    Tasks: 71
   Memory: 412.3M
   CGroup: /system.slice/instana-agent.service
           tq17013 /opt/instana/agent/jvm/bin/java -XX:+UnlockDiagnosticVMOptions -XX:+UseSerialGC -Xmn32m -Xss512k -XX:InitialCodeCacheSize=8m -XX:CodeCacheExpansionSize=64k -XX:Reserve...
           mq17229 /opt/instana/agent/data/repo/com/instana/ebpf-sensor/0.1.6/ebpf-sensor-0.1.6.bin

Kubernetesへのエージェント導入

KubernetesはDaemonSetとして各ワーカノードへエージェント用Podが導入されます。 KubernetesへAgentを導入する方法としてマニフェストファイル(yaml),helm,operatorを利用した3つの手順があります。
マニフェストファイル(yaml)を利用した手順をご紹介します。

  1. Instana管理画面のメニューより[Agents] > [Installing Instana Agents]をクリックします。
    Kubernetesを選択し、 [Technology]では[YAML]を指定します。

  2. [Cluster name]へ任意のクラスタ名を入力します。
    ※入力するクラスタ名はInstanaにて管理する際に利用されます。

  3. [Download]をクリックし、マニフェストファイルをダウンロードします。

instana1_01_k.png

  1. 監視対象のKubernetsクラスタにログインしている環境へマニフェストファイルを配置します。

  2. Kubernetesクラスタへマニフェストファイルを展開します。

$ kubectl apply -f configuration.yaml
namespace/instana-agent created
serviceaccount/instana-agent created
secret/instana-agent created
configmap/instana-agent created
daemonset.apps/instana-agent created
clusterrole.rbac.authorization.k8s.io/instana-agent created
clusterrolebinding.rbac.authorization.k8s.io/instana-agent created
  1. エージェントコンテナ起動
    エージェントPodは[instana-agent]名前空間にDaemonsetリソースとしてデプロイされます。
$ kubectl get all -n instana-agent
NAME                      READY   STATUS    RESTARTS   AGE
pod/instana-agent-q5j6c   2/2     Running   0          109s

NAME                           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/instana-agent   1         1         1       1            1                     110s

エージェントの導入が完了すると、自動的にテクノロジーの検出およびメトリクス/トレースの収集を実行してくれます。
収集されたデータがどのように提供されるか、以降に記載いたします。

メトリクス/トレース収集

Instana管理画面のメニューベースでご紹介いたします。

インフラストラクチャ

Instana管理画面のインフラストラクチャメニューでは、インフラレイヤー視点での監視を行うことができます。
LinuxサーバとKubernetesのノードがマップ表示されます。
この画面で得られる情報は次のポイントです。
・サーバのメトリクス、状態の可視化
・サーバ上で稼働しているテクノロジーのメトリクス、状態の可視化
・CPU/メモリの使用率を一元的に確認
instana1_02.png

ホストまたはテクノロジーにてアラートが発生した場合、色分けによって警告/エラーを把握することができます。
サンプルのイメージでご紹介いたします。サーバ上で稼働のRedisサービスにアラートが発生時の表示。
instana1_s1.png

インフラレイヤー視点でオンプレミス/クラウド関係なく、サーバ/テクノロジーの状態を一目で理解することができます。

さらに各ホストにカーソルを合わせ、オープンダッシュボードを開くことで詳細を得られます。

・ Linuxホスト上のメトリクス
CPU/メモリ/Disk/ネットワークのメトリクス情報。検出されたテクノロジーが表示されます。
instana1_04.png

Tomcatサービスを選択すると自動検出されたメトリクス情報を得ることができます。
デプロイされているアプリケーション、コネクション情報。
instana1_051.png スレッド数、ヒープメモリ、メモリプール、GC情報。
instana1_052.png

・ Kubernetes環境のワーカーノードのメトリクス
Linuxホストと同様にワーカーノード上のメトリクスを得ることができます。ワーカーノード上で稼働しているコンテナ内のテクノロジーが表示されます。
instana1_06.png

Kubernetes

Instana管理画面のKubernetesメニューでは、Kubernetesクラスタの状態をリソースレベルで知ることができます。

クラスタ毎に展開されているリソース数および状態が表示されます。
クラスタを選択することで、クラスタ全体のCPU/メモリー使用率、Pod単位でのCPU/メモリー使用率、それらの稼働状態を知ることができます。
instana1_07.png

1クラスタのみ登録いたしましたが、Instanaを利用することで、オンプレミス環境に構築したKubernetesクラスタや、パブリッククラウドが提供するマネージドKubernetesクラスタ(AKS,EKS,GKEなど)などの複数のKubernetesクラスタを一元的に管理することができます。

トレース

Instana管理画面のAnalyticsメニューでは、トレース情報を知ることができます。
監視対象にて呼び出されたトレース情報が時系列にて表示され、条件を指定しリクエスト毎にパフォーマンスを調査することができます。
sock-shopに関するトレースがリスト化されております。
instana1_08.png

参考に1つのトレース情報を見ていきます。
・トレース内にて発生したコール数、エラー数、ログ、レイテンシー
・[Timeline]ではメインコールによる全体の処理時間。サブコールの実行および処理時間
・[Service Endpoint List]ではトレースが実行された際に呼び出されたテクノロジーがリスト化
・[Calls]ではトレースツリー表記となっており、メインコール/サブコールのリスエスト内容の表示

各コールを選択することで詳細情報(画面右側)が表示され、コールの呼び出し元、呼び出し先、スタックトレース、関連するインフラストラクチャ情報を得ることができます。
instana1_09.png

これらの情報を基にどこに問題があるのか、異常発生個所の特定までに要する時間のスピードアップ、パフォーマンスの改善に役立てることができます。

アプリケーション・パフォーマンス

Instana管理画面のアプリケーションメニューでは、ゴールデンシグナル(トラフィック、エラー率、レイテンシー)やアプリケーション間の依存関係を知ることができます。
instana1_s5.png

サービスはテクノロジー(tomcat,php,pythonなど)を示しており、すべて自動的に検出されパフォーマンスの収集が行われます。
アプリケーションは複数のサービスをまとめた定義となり、ユーザが管理しやすいように、システム単位、機能単位など様々な切り口から作成することができます。

Kubernetesのマイクロサービスアプリケーション(sock-shop)を参考例としてサービスとアプリケーションを見ていきます。

サービスの状況

Servicesタブを選択することで検出されたサービスの一覧が表示されます。
サービスごとにゴールデンシグナルを収集しており個別に性能情報を得ることができます。
instana1_10.png

参考に1つのサービスを見ていきます。
サービスへのコール数、リクエスト結果、エラー数、エラー内容、レイテンシーなど、パフォーマンス情報を詳細に得ることができます。
instana1_s3.png

[Flow]タブではサービス間の依存関係も自動的に検出され、呼び出し元/呼び出し先が可視化され、影響範囲の特定や呼び出し状況を把握することができます。
instana1_s2.png

アプリケーション定義

ユーザが管理しやすいように複数のサービスを1つのアプリケーションとして定義いたします。
作成する際には特定のサービスを指定、特定のホスト上で稼働しているサービスを指定、Kubernetesのリソースを指定、コンテナ名を指定などの条件設定があります。
Kubernetesの[sock-shop]名前空間を条件として作成し、sock-shopというアプリケーションを定義します。
instana1_11.png

作成したアプリケーション(sock-shop)を見ていきます。
サービスにて紹介した項目と同様の項目が表示されており、条件に指定されたすべてのサービスの合計値、平均値が表示されます。
sock-shopシステム全体のコール数、エラー率、レイテンシーを把握することができます。
instana1_12.png

[Dependencies]タブでは、サービス間の依存関係が可視化されます。
Instanaは収集したすべてのリクエストを解析し、稼働中のサービス間の依存関係を把握してリアルタイムに可視化します。
sock-shopでは、ordersサービスとcarts,shipping,dataサービス、shippingサービスとcarts,data,rabbitmqサービスに依存関係があることが読み取れます。
各サービスで発生した問題を調査する場合、それらの呼び出し先も含めた分析をすることができます。
instana1_13.png

サービスに対してアラートが発生した場合、サービスのマークが色分けされ、どこのサービスに問題が発生しているのか一目で理解することができます。
サンプルのイメージでご紹介いたします。eum-frontendサービスにてエラーアラートが発生している場合。
instana1_s4.png

まとめ

Instanaはエージェントを導入するだけでホスト内にて稼働しているテクノロジーを自動的に検出し、メトリクス/トレース収集を開始します。
システムを構成するアプリケーション間の依存関係が可視化され、サービス間の繋がりを把握することができ、スムーズに調査が行えます。
異常発生から問題個所の特定にかかる時間の短縮、アプリケーション運用状態の理解に役立てることができると思います。

第2回目では実環境を用いたInstanaのご紹介をさせていただきました。 次回以降も引き続き,Instanaの機能をご案内していきます。

Webinar開催のお知らせ

2021年9月28日(火) 15時~16時にてInstanaの製品説明からデモンストレーションのWebセミナーを開催いたします。
今回の記事では、エージェントのインストールからアプリケーションの依存関係検出を中心にご紹介しましたが、Webセミナーではその他の機能を踏まえて実際の操作画面をデモンストレーションします。影響範囲や原因の特定、障害対応の開始まで省力化・スピードアップといったInstanaのメリットを紹介します。
ぜひ、ご覧ください。
Instana Webinar開催ページ