CA APMSQL での Grafana の使用

Grafana はオープン ソースのレポート ツールであり、Grafana Labs によって配布およびサポートされています。 CA APM カスタマは Grafana を使用して、APM データの高度で、解釈が容易な、カスタマイズされたビューを生成できます。 以下のスクリーンショットは、Grafana ダッシュボードを示しています。
apmdevops106
Grafana はオープン ソースのレポート ツールであり、Grafana Labs によって配布およびサポートされています。 CA APM カスタマは Grafana を使用して、APM データの高度で、解釈が容易な、カスタマイズされたビューを生成できます。 以下のスクリーンショットは、Grafana ダッシュボードを示しています。
image2017-10-26 14:2:25.png
APM およびそれに固有の SmartStor データを使用したレポート作成に関連付けられているディスク アクティビティが活発であるため、Grafana ユーザはその SmartStor データ ディレクトリを SSD に展開することをお勧めします。 SmartStor データ ディレクトリを SSD に展開することは必須ではありませんが、そうすることは週次または月次レポートを実行する際に非常に有益です。
この記事では、APMSQL に接続する新しい Grafana データ ソースを使用した Grafana セットアップ プロセスについて説明します。 この記事の最後まで、独自のカスタム APM ビューを作成するために、Grafana を使用する準備ができている必要があります。 Grafana のドキュメントは、Web でも利用可能です。 最初のダッシュボード作成に関するチュートリアルについては、「Grafana Getting Started Guide」を参照してください。
開始する前に、以下のコンポーネントがセットアップされていることを確認します。
  • APM 10.5+ (APMSQL が利用可能である必要があります)
  • 実行中であり、接続済みの APMSQL サーバ、および以下のコンポーネントの
    いずれか
    • 組み込み Jetty JSON データ ソース
      APM 10.7 SP2 では、Grafana データ ソースはデフォルトで APMSQL サーバに組み込まれています。
    • Tomcat 8+ インスタンス、またはそれと同等のもの(JAX-RS をサポートする必要があります)。ここに、APM 用の新しい Grafana データ ソースを展開します。
  • Grafana 4.6.0+ (4.6.0 に対してテスト済み)
詳細については、「前提条件」を参照してください。
2
APM Grafana アーキテクチャの概要
以下の図は、APM インフラストラクチャにおける Grafana を示しています。
Grafana
Grafana
APM Enterprise Manager (EM)は、データを受信し、SmartStor と呼ばれる自己アーカイブ機能を使用して、そのデータを最適化されたデータベースに格納します。 「APMSQL サーバのインストールおよび設定」では、SmartStor にリレーショナル インターフェースを提供します。これによって、JDBC 接続を通じて、複雑な SQL クエリを実行できます。 APMSQL への JDBC 接続を通じて、SQL を使用して、APM に対してクエリを実行できます。 Grafana は JDBC 接続を通じたクエリをサポートしないので、追加のレイヤがアーキテクチャに追加されました。 Grafana は JSON でクエリを発行し、データ応答を取得します。 CA APM では、新しい REST サービスが実装されました。これは、Grafana から JSON クエリを取得し、それを SQL クエリとして APMSQL に渡し、JSON のストリームとして受信する SQL 結果セットを Grafana に返すことができます。 REST サービスは、APM 10.7 SP2 で、デフォルトで APMSQL サーバ プロセスに展開されますが、
grafanarest.war
ファイルとしてスタンドアロン Tomcat インスタンスに展開することもできます。 いずれの場合でも、REST サービスは実行中の APMSQL サーバに接続するように設定する必要があります。
REST サービスは、APSQML サーバ インプロセス展開の使用時に、デフォルトで設定されます。
Grafana アーキテクチャでは、Tomcat は APMSQL JSON プラグイン REST サービスのホストとして存在します。 Tomcat 展開はオプションの設定です。 APMSQL に組み込まれている Jetty サーバを使用することで、JDBC 接続はローカルになり、Tomcat 層は必要なくなりました。 ほとんどの展開は組み込み Jetty コンテナで開始され、拡張性を考慮して、Tomcat インスタンスに移動されます。
JSON データ ソースは Grafana で使用するように設計されましたが、Tomcat に展開することもできます。
このデータ ソースは、ブラウザで実行されている JavaScript コードなど、JSON を認識する任意の REST クライアントによっても使用できます。 APMSQL JSON データ ソースとの独自の RESTful 統合を実行する場合は、Simple JSON データ ソースに関する Grafana のドキュメントを参照してください。
クエリおよび応答に関する詳細情報を参照するには、APMSQL JSON データ ソースが生成するログ ファイルを開きます。 JSON クエリは、
apmsql-query-request.log
ファイルに表示されます。JSON 応答は、
apmsql-query-response.log
ファイルに表示されます。
前提条件
  • APMSQL
    - ここに記述されている通りに、APMSQL サーバをセットアップおよび実行します。
    APMSQL サーバへの接続に問題がある場合は、JDBC バインド アドレスを APMSQL サーバ ホストの IP に設定します。
    config/APMSqlServer.properties
    ファイル内の
    com.ca.apm.sqlserver.jdbcbind.address=<apmsql server ip>
    設定を変更します。
  • アプリケーション コンテナ
    - Tomcat 8+ インスタンスを
    grafanarest-<version_number>.war
    ファイルと共に展開するか、JAX-RS をサポートする別のコンテナを使用します。 どのコンテナを選択しても、適切な APMSQL ホストおよびポートに接続するように、コンテナを設定します。 Tomcat 用リソース定義の、以下の例を参照してください。
    Tomcat 8 以降のインスタンスの展開を選択した場合は、
    grafanarest-<version_number>.war
    ファイル名から
    version_number
    を削除してください。 詳細については、「CA APM 用の Grafana のセットアップ」を参照してください。
  • アプリケーション コンテナ用のデータ ソース
    - Tomcat の場合、conf フォルダから context.xml ファイルを開き、APMSQL への接続をセキュリティ保護するために、以下の行を追加します。
    <Context>
    ...
    <Resource
    name="jdbc/APMSQLConn"
    auth="Container"
    type="javax.sql.DataSource"
    maxActive="50"
    maxIdle="10"
    maxWait="10000"
    driverClassName="org.teiid.jdbc.TeiidDriver"
    url="jdbc:teiid:[email protected]://192.168.1.123:54321"
    username="admin"
    password=""
    />
    ...
    </Context>
    driverClassName
    ,
    url
    ,
    username
    、および
    password
    パラメータは、JDBC クライアントを APMSQL に接続するために使用する、同じパラメータです。 パスワードを埋め込みたくない場合は、APM Team Center インターフェースの
    [セキュリティ]-[設定]
    で永続的なトークンを生成します。 ユーザ名をトークンに置き換え、パスワードを空白のままにします。
  • インストールまたはアップグレードされた EM
    - EM のインストールまたはアップグレードが正常に実行されると、
    <EM_Home>
    ディレクトリ内の
    APMSqlServer
    フォルダに
    \APMSqlServer
    以下のフォルダが含まれます。
    • repo
      依存 JAR ファイルおよび 2 つの WAR ファイル、つまり
      com.ca.apm.server.teiid-<version_number>.war
      および
      grafanarest-<version_number>.war
      が含まれています。
    • bin
      apmsql script
      (Linux)および
      apmsql.bat
      (Windows)ファイルが含まれています。
    • client
      JDBC を使用して、APMSQL への接続として機能する
      teiid-9.0.1-jdbc.jar
      ファイルが含まれています。
    • webapps
      組み込み Jetty コンテナに展開する WAR ファイルが含まれています。
    • config
      ポート番号、データ ソース、および Web アプリケーション コンテキストの設定が含まれています。
    • logs
      Grafana REST サービスおよび Jetty サーバ ログ ファイルが含まれています。
以下の画像は、成功したインストールの主要なコンポーネントを示しています。
Confirmation1.jpg
Confirmation2.jpg
Confirmation3.jpg
Confirmation4.jpg
WAR ファイルにある Grafana Simple JSON ソースは、JSON クエリをサポートしています。 JSON を受信するためのクエリ メカニズムとして、JavaScript ライブラリ、または RESTful POST をサポートする他のツールを使用できます。 詳細については、「Grafana データ ソース」を参照してください。
CA APM 用の Grafana のセットアップ
データ ソース WAR ファイルをダウンロードした後に、それを Jetty コンテナまたは Tomcat サーバに展開します。
以下の手順に従います。
  1. config
    フォルダの
    apmsql-server-jetty-config.xml
    ファイルを開き、以下の詳細を入力します。
    • APMSQL ユーザ名およびパスワードまたは認証トークン
      これらのフィールドに対するデフォルト値が入力されます。
    • Grafana REST サービス ポート番号
      Grafana ダッシュボードは、以下の URL を使用して、REST サービスにアクセスします:
      http://<em_host_name>:9080/grafanarest
      デフォルト: 9080
  2. (オプション) APMSQL サーバおよび Grafana REST サービス用の以下のコンテキスト展開ファイルを設定します。
    • grafana-jetty-app.xml
    • apmsql-jetty-app.xml
      Jetty サーバの起動時に、コンテキスト展開ファイルは自動的に展開されます。
  3. (オプション) Tomcat サーバ上に Grafana を展開するには、以下の手順に従います。
    1. grafanarest-<version_number>.war
      ファイルを
      <tomcat.root>/webapps
      ディレクトリにコピーします。
    2. Delete
      <version_number>
      grafanarest-<version_number>.war
      ファイル名から削除します。
    3. APMSQL のデータ ソース接続プーリングを定義するために、
      /conf/context.xml
      ファイルに以下の行を追加します。
      <Resource
      name="jdbc/APSQLConn"
      auth="Container"
      type="javax.sql.DataSource"
      maxActive="50"
      maxIdle="10"
      maxWait="10000"
      driverClassName="org.teiid.jdbc.TeiidDriver"
      url="<APMSQL connection URL used in squirrel client>"
      username="<apmsql user name>"
      password="<apmsql password>"
      />
    例外が発生する場合は、調査する
    <tomcat.root>/logs/apmsql-grafana-service.log
    ファイルを開きます。 詳細な JSON デバッグ情報は、
    <tomcat.root>/temp/apmsql-query-request.log
    ファイルおよび
    <tomcat.root>/temp/apmsql-query-response.log
    ファイルにあります。
  4. apmsql script
    (Linux)または
    apmsql.bat
    (Windows)を実行して、APMSQL サーバおよび Grafana REST サービスを起動します。
    apmsqlserverout.log
    ファイルが開きます。
  5. ログ ファイルで、サーバ スタートアップ進捗状況を監視します。
Grafana ダッシュボードへの接続
Grafana ダッシュボードに接続するには、Grafana サーバをダウンロードし、JSON データ ソース プラグインをインストールし、APMSQL REST サービスを展開し、データ ソースを使用して APMSQL への接続を確立します。 接続を確立するには、前の
Tomcat context.xml
データ ソースの例を参照します。
以下の手順に従います。
  1. Grafana サーバのダウンロードおよび起動
    Grafana ダウンロード ページに移動し、Grafana サーバを実行するための OS を選択します。 サーバをダウンロードした後に、設定手順に従います。
    正しいポート番号を選択していることを確認します。 各 OS で、使用するポート番号は異なります。 詳細については、「Grafana のインストール」を参照してください。
  2. Grafana サーバの起動および Grafana クライアントのオープン
    http://<grafana_server_host>:<grafana_port_no>/
    に移動します。 デフォルトの認証情報は
    admin/admin
    です。
  3. JSON データ ソース プラグインのインストール
    Grafana は、独自の JSON データ ソース プラグインを提供します。 このプラグインをインストールするには、サーバの
    bin
    フォルダに移動し、ここで別のターミナルまたはコマンド プロンプトを開きます。 サーバの実行中に、以下のコマンドを実行します。
    grafana-cli plugins install grafana-simple-json-datasource
    コマンドによって、プラグインがインストールされていることが確認されます。 Grafana サーバを再起動します。
  4. Grafana での新しい JSON データ ソースの定義
    アプリケーション サーバに REST サービスを展開した後に、Grafana で JSON データ ソースを作成します。
    以下の手順に従います。
    1. ブラウザで
      localhost:7001/login
      を開いて、Grafana コンソール(または Grafana 用に選択したいずれかのポート)にアクセスします。
      デフォルトの認証情報は admin/admin です。
    2. ホーム ページで[Grafana]アイコンをクリックし、
      [データ ソース]
      をクリックします。
      grafana menu datasources.png
    3. [データ ソースの追加]
      をクリックします。
    4. データ ソース名を入力し、データ ソースのタイプとして
      [SimpleJSON]
      を選択します。
      simplejson.png
    5. URL の詳細を次のように入力します:
      http://<hostname>:portnumber/grafanarest
      デフォルトのポート番号は 9080 です。
      APMSQL REST サービスを Tomcat に展開した場合は、Tomcat サーバのホスト名およびポート番号を使用します。例:
      http://tomcat-host:8080/grafanarest.
      8080 は、Tomcat と WebView の両方のデフォルト ポートです。 Tomcat インスタンスが WebView ホストを共有する場合、Tomcat
      conf/server/xml
      ディレクトリでデフォルト ポートの確認または変更が必要になる場合があります。
  5. 接続のテスト
    データ ソースの詳細を入力した後に、
    [Save & Test (保存およびテスト)]
    をクリックします。 緑色の確認メッセージが表示されます。
    success.png
これで、Grafana ダッシュボードに正常に接続しました。
接続が失敗した場合、Tomcat が実行されていて、データ ソース WAR ファイルが展開されていることを確認します。 Tomcat ログに、アプリケーションが正常に展開されたかどうかが表示されます。 アプリケーションが展開され実行中の場合は、
<tomcat.root>/temp/apmsql-query-request.log
および
<tomcat.root>/temp/apmsql-query-response.log
ファイルを確認します。
Grafana の使用
Grafana を使用すると、APMSQL データベースに対して直接クエリを行うことができます。 Grafana では、表およびグラフを使用して、データを整理、集約、視覚化します。
Grafana での時系列クエリの実行
時系列クエリを実行し、ダッシュボードで結果を視覚化します。
以下の手順に従います。
  1. [ホーム]
    -
    [ダッシュボード]
    -
    [新規]
    に移動します。
    newdashboars.png
  2. [グラフ]
    をクリックして、グラフを作成します。
    newgraph.png
  3. Grafana に、静的な事前ロード済みデータがグラフで表示されます。 APMSQL の実際のデータを表示するには、以下の手順に従います。
    1. [Panel Title (パネル タイトル)]
      をクリックし、
      [編集]
      をクリックします。
      panel edit.png
    2. [メトリック]
      タブで、
      [Panel Data Source (パネル データ ソース)]
      として
      [JSONAPMSQL]
      を選択します。
      [Add Query (クエリの追加)]
      をクリックしてから、
      [Toggle Edit Mode (編集モードの切り替え)]
      をクリックして、編集モードに切り替えます。
      add query.png
    3. [Toggle Edit Mode (編集モードの切り替え)]
      の隣にある目のアイコンをクリックして、クエリ エディタを開きます。
      image2017-10-26 14:47:3.png
    4. クエリをクエリ エディタに貼り付けます。 すべてのクエリで、構文は以下のようになります。
      apmsql <agent specifier regex> <metric specifier regex> <column specifier> [exact]
      詳細:
      <エージェント記述子の正規表現> を使用したクエリおよびエージェント名の特殊文字の処理の詳細については、「CA APM Grafana APMSQL クエリ」を参照してください。
      CA APM の管理者およびアナリストは、正規表現構文に精通している必要があります。 正規表現がエージェントと一致しない場合、またはエージェントと一致するがメトリックとは一致しない場合、グラフは空白で表示されます。 式が複数のエージェントと一致する場合、クエリは表示する 1 つのエージェントを任意に選択します。 時系列クエリを実行し、複数のメトリックがエージェントと一致する場合、クエリは表示する 1 つのメトリックを選択します。 テーブル クエリでは、1 つのエージェントおよび 1 つ以上のメトリックが予期されます。
各項目の説明:
      • apmsql
        クエリ タイプとして、APMSQL を定義します。
      • agent
        specifier regex
        正規表現クエリを使用して、1 つのエージェントと一致します。
      • metric
        s specifier regex
        正規表現を使用して、1 つのエージェント(時系列クエリの場合)、または複数のメトリック(テーブル クエリの場合)と一致します。
      • column
        specifier
        時系列クエリを補足します。 これらの列の詳細については、APMSQL のドキュメントを参照してください。
        例:
        agg_value、value_count、min_value、または max_value
      • exact
        メトリック名の完全一致を予期して、クエリのパフォーマンスを向上させます。
        最終クエリに対して、常に正確なキーワードを使用してください。 このキーワードによって、クエリのパフォーマンスが大幅に向上します。
例 1:
複数のメトリックを使用して、グラフを作成します。この例では、指定された期間における、1 つのメトリック パス(単一の CPU)の変化が返されます。
apmsql '.*thieves.*' 'CPU|Processor 0:Utilization.*' agg_value
2 番目のメトリック パスを追加することで、グラフに 2 行のデータが表示されます。
apmsql '.*thieves.*' 'CPU|Processor 1:Utilization.*' agg_value
結果:
Grafana で、グラフに 2 つのメトリックの結果が表示されます。
image2017-10-26 14:47:43.png
例 2: フロントエンド thieves の応答時間を選択します。
この例では、
[呼び出されたバックエンド]
メトリックなしの、アプリケーション フロントエンドのすべての
thieves
の平均応答時間が返されます。 テーブルおよびヒートマップ ウィジェットで、このクエリを使用します。
apmsql '.*thieves.*' '^Frontends.*thieves.*/(?!.*?Called Backends).*Time.*' agg_value
結果:
image2017-10-27 11:49:24.png
CA BlazeMeter で、またはブラウザ エージェントを使用して、負荷テストを実行している場合、代わりにビジネス トランザクションに対してクエリを実行できます。
apmsql '.*Tomcat Agent' '^Business Segment.*thieves.*(?!.*?Called Backends).*Time.*' agg_value
メトリックとの一致に正規表現が必要ではない場合、APMSQL 用の Grafana には「正確な」キーワードもあります。これを使用することで、クエリのパフォーマンスが向上します。
apmsql '.*Tomcat Agent' 'Business Segment|ssd-thieves|Alejandro|Health:Average Response Time (ms)' agg_value exact
apmsql '.*Tomcat Agent' 'Business Segment|ssd-thieves|Bala|Health:Average Response Time (ms)' agg_value exact
apmsql '.*Tomcat Agent' 'Business Segment|ssd-thieves|Escape|Health:Average Response Time (ms)' agg_value exact
apmsql '.*Tomcat Agent' 'Business Segment|ssd-thieves|Search|Health:Average Response Time (ms)' agg_value exact
apmsql '.*Tomcat Agent' 'Business Segment|ssd-thieves|Steal|Health:Average Response Time (ms)' agg_value exact
ターゲット メトリック指定子を正確に指定することで、時間範囲が長い場合でも、非常に迅速にレポートが生成されます。 クエリするメトリックを認識したら、最初に「正確な」キーワードを使用することをお勧めします。
例 3:
purchase フロントエンドおよびその他のフロントエンドの応答時間を選択します。
この例では、
/purchase
フロントエンド(これが有効な唯一のフロントエンドである場合)、および必要に応じて他のいくつかのフロントエンドの平均応答時間と一致します。
apmsql '.*thieves.*' '^Frontends.*thieves.*/purchase(?!.*?Called Backends).*Time.*' agg_value
結果:
image2017-10-27 11:50:10.png
例 4: GC ヒープを使用して、接続をテストします。
このクエリでは、名前に「thieves」が含まれているエージェントを選択します。 接続されているエージェントの名前に「thieves」が含まれている場合、
GC Heap:Bytes In Use
パラメータは常にレポートされる必要があります。 このクエリを使用して、接続をテストします。
apmsql '.*thieves.*' 'GC Heap.*Bytes.*Use' agg_value
結果:
image2017-10-27 11:54:54.png
これで、APMSQL データが表示されるグラフが作成されました。
Grafana 内のテーブル
グラフを作成したのと同じ方法で、Grafana でテーブルを設定します。 クエリ タイプとして
[テーブル]
を選択します。
table type.png
例:
この例では、複数のメトリックを使用して、アプリケーションのパフォーマンスの概要をコンパイルします。
apmsql '.*thieves.*' '^Frontends.*thieves.*/(?!.*?Called Backends).*Time.*' agg_value
結果:
image2017-10-26 15:6:35.png
Grafana でのエラー メッセージの表示
APMSQL クエリからの一部のエラー メッセージは、Grafana UI から表示できます。 パネルにエラー メッセージの通知が赤で表示されます。
image2017-10-26 15:11:57.png
エージェントおよびメトリックの式を直接検証するには、APMSQL に接続されている SQL クライアント(たとえば、SQuirrel)にクエリを貼り付けます。
多くの場合、一重引用符文字「'」はほとんど自動的に斜体の一重引用符に置換されます。
接続エラー
Grafana は、tomcat ログ ファイルで以下のエラー メッセージをレポートします。
  • エラー メッセージ:
    Error in acquiring APMSQL connection:Cannot create PoolableConnectionFactory (TEIID20020 Error establishing socket to host and port: hostname:54321. Reason: Connection refused: connect)
    原因:
    Tomcat を起動したか、Grafana REST サービスを展開しましたが、サービスが APMSQL に接続できません。
  • エラー メッセージ:
    HTTP Error Bad gateway
    原因:
    新しい接続をセットアップすると、Tomcat WAR REST サービスが停止します。
  • エラー メッセージ:
    HTTP Error Internal Server Error, Error in SQL Connection:Cannot create PoolableConnectionFactory (TEIID20020 Error establishing socket to host and port: hostname:54321. Reason: Connection refused: connect)
    原因:
    JDBC 接続をセットアップすると、Tomcat WAR サービスは稼働していますが、APMSQL は停止していて到達不能です。
  • エラー メッセージ:
    Cannot create PoolableConnectionFactory (TEIID20020 Error establishing socket to host and port: hostname:54321. Reason: Connection refused: connect)
    原因:
    クエリを実行する場合は、APMSQL を使用できません。
構文エラー
Grafana クエリ インスペクタに移動して、正規表現クエリに構文の問題がないか確認します。
regex_syntax.png
Grafana は、緑色のテキストでエラー メッセージをレポートします。
image2017-11-2 11:30:41.png
エラー メッセージ:
TEIID30448 Error : An error in processing your regular expression
原因:
クエリの実行時に、APMSQL を使用できませんでした。
接続問題のトラブルシューティング
Grafana 接続の問題をトラブルシューティングします。
以下の手順に従います。
  1. APMSQL クエリを実行します。 クエリが結果を返せなかった場合は、Squirrel クライアントを通じた APMSQL への接続が成功したかどうか確認します。
  2. Grafana REST サービスをテストします。
    1. APMSqlServer/logs
      フォルダにあるログ ファイルにエラー メッセージがないか確認します。
    2. Grafana REST サービス ルート URL をテストします。
      デフォルト:
      http://<em_host_name>:9080/grafanarest
      クエリは、以下の JSON 応答を返す必要があります。
      {"message":"Connection established successfully"}
      ポート番号を変更するには、
      APMSqlServer/config
      フォルダ内の
      apmsql-server-jetty-config.xml
      を編集します。
    3. apmsqlserverout.log
      および
      apmsqlgrafanaservice.log
      ファイルの REST サービス エラーを確認します。 両方のファイルは、
      APMSqlServer/logs
      フォルダに格納されます。