IBM API Connect V10 分析データのプラグインを確認する

# はじめに
本記事では、IBM API Connect V10 の分析サブシステムにおいて、分析データをサード・パーティー・システムにオフロードする場合等に対応しているプラグインの確認方法を備忘します。

# 確認環境
以下の IBM API Connect V10 for Containers on OpenShift Container Platform 版で動作確認をしています。

|コンポーネント|バージョン|
|:--|--:|:--:|
|OpenShift Container Platform|4.6.16|
|IBM API Connect|10.0.1.2-ifix2-100-eus|

# 分析サブシステムについて
- API Connect の分析サブシステムである `Analytics` は、以下のようなマイクロ・サービス Pod から構成されています。

```
# oc get po -l app.kubernetes.io/instance=analytics
NAME                                       READY   STATUS      RESTARTS   AGE
analytics-cj-retention-1630287000-c2p9x    0/1     Completed   0          108m
analytics-cj-rollover-1630293300-p2lvs     0/1     Completed   0          3m51s
analytics-client-77c79c4dd9-n7vbx          1/1     Running     0          68d
analytics-ingestion-6c657f847d-92649       1/1     Running     0          68d
analytics-mtls-gw-6889cbdcb9-jtvph         1/1     Running     0          68d
analytics-storage-coord-7466458c88-xhgtv   1/1     Running     0          68d
analytics-storage-data-0                   1/1     Running     0          68d
analytics-storage-master-0                 1/1     Running     0          68d
```

 - ゲートウェイ・サブシステム `Gateway` 上で呼び出された API のレコードが Analytics に Push されると、Analytics はそれを `分析データ` として加工し、以下のいずれか、または両方の方法で参照することができます。

   - Analytics の DB に分析データをストアし、Management サブシステム `API Manager` またはポータル・サブシステム `Portal` から分析画面を介して参照
   - サード・パーティー・システムに分析データをオフロードし、サード・パーティー・システムから参照

 - オフロード先のサード・パーティー・システムは、執筆時点で公式には以下の4種類がサポートされています。

   - HTTP(s) endpoints
   - Elastic Elasticsearch v6, v7
   - Apache Kafka v1.0.0
   - Syslog servers

 - 分析データのオフロードは、内部的に `Elastic Logstash` の技術が使われています。

# Logstash プラグインの確認方法

Analytics のマイクロ・サービス Pod `analytics-ingestion` のシェルを実行して、使用可能なプラグインを参照します。


## analytics-ingestion pod のシェル実行
```
# oc exec -it analytics-ingestion-6c657f847d-92649 bash
bash-4.4$ 
```

## 使用可能な Logstash プラグインのリスト参照
```
bash-4.4$ /usr/share/logstash/bin/logstash-plugin list --verbose
```

# 実行結果例
```
logstash-codec-avro (3.2.4)
logstash-codec-cef (6.1.1)
logstash-codec-collectd (3.0.8)
logstash-codec-dots (3.0.6)
logstash-codec-edn (3.0.6)
logstash-codec-edn_lines (3.0.6)
logstash-codec-es_bulk (3.0.8)
logstash-codec-fluent (3.3.0)
logstash-codec-graphite (3.0.5)
logstash-codec-json (3.0.5)
logstash-codec-json_lines (3.0.6)
logstash-codec-line (3.0.8)
logstash-codec-msgpack (3.0.7)
logstash-codec-multiline (3.0.10)
logstash-codec-netflow (4.2.1)
logstash-codec-plain (3.0.6)
logstash-codec-rubydebug (3.1.0)
logstash-filter-aggregate (2.9.1)
logstash-filter-anonymize (3.0.6)
logstash-filter-apic (2.15.0)
logstash-filter-cidr (3.1.3)
logstash-filter-clone (4.0.0)
logstash-filter-csv (3.0.10)
logstash-filter-date (3.1.9)
logstash-filter-de_dot (1.0.4)
logstash-filter-dissect (1.2.0)
logstash-filter-dns (3.1.4)
logstash-filter-drop (3.0.5)
logstash-filter-elasticsearch (3.9.0)
logstash-filter-fingerprint (3.2.2)
logstash-filter-geoip (6.0.3)
logstash-filter-grok (4.3.0)
logstash-filter-http (1.0.2)
logstash-filter-json (3.1.0)
logstash-filter-kv (4.4.1)
logstash-filter-memcached (1.1.0)
logstash-filter-metrics (4.0.6)
logstash-filter-mutate (3.5.0)
logstash-filter-prune (3.0.4)
logstash-filter-ruby (3.1.5)
logstash-filter-sleep (3.0.7)
logstash-filter-split (3.1.8)
logstash-filter-syslog_pri (3.0.5)
logstash-filter-throttle (4.0.4)
logstash-filter-translate (3.2.3)
logstash-filter-truncate (1.0.4)
logstash-filter-urldecode (3.0.6)
logstash-filter-useragent (3.2.4)
logstash-filter-uuid (3.0.5)
logstash-filter-xml (4.1.1)
logstash-input-azure_event_hubs (1.2.2)
logstash-input-beats (6.0.11)
logstash-input-couchdb_changes (3.1.6)
logstash-input-dead_letter_queue (1.1.5)
logstash-input-elasticsearch (4.7.1)
logstash-input-exec (3.3.3)
logstash-input-file (4.2.2)
logstash-input-ganglia (3.1.4)
logstash-input-gelf (3.3.0)
logstash-input-generator (3.0.6)
logstash-input-graphite (3.0.6)
logstash-input-heartbeat (3.0.7)
logstash-input-http (3.3.5)
logstash-input-http_poller (5.0.2)
logstash-input-imap (3.1.0)
logstash-input-jms (3.1.2)
logstash-input-kafka (9.1.1)
logstash-input-pipe (3.0.7)
logstash-input-redis (3.5.1)
logstash-input-s3 (3.5.0)
logstash-input-snmp (1.2.7)
logstash-input-snmptrap (3.0.6)
logstash-input-sqs (3.1.2)
logstash-input-stdin (3.2.6)
logstash-input-syslog (3.4.4)
logstash-input-tcp (6.0.6)
logstash-input-twitter (4.0.3)
logstash-input-udp (3.3.4)
logstash-input-unix (3.0.7)
logstash-integration-jdbc (5.0.6)
 ├── logstash-input-jdbc
 ├── logstash-filter-jdbc_streaming
 └── logstash-filter-jdbc_static
logstash-integration-rabbitmq (7.1.1)
 ├── logstash-input-rabbitmq
 └── logstash-output-rabbitmq
logstash-output-cloudwatch (3.0.8)
logstash-output-csv (3.0.8)
logstash-output-elastic_app_search (1.1.1)
logstash-output-elasticsearch (10.6.2)
logstash-output-email (4.1.1)
logstash-output-file (4.3.0)
logstash-output-gelf (3.1.7)
logstash-output-graphite (3.1.6)
logstash-output-http (5.2.4)
logstash-output-kafka (8.1.1)
logstash-output-lumberjack (3.1.7)
logstash-output-nagios (3.0.6)
logstash-output-null (3.0.5)
logstash-output-pipe (3.0.6)
logstash-output-redis (5.0.0)
logstash-output-s3 (4.3.2)
logstash-output-sns (4.0.7)
logstash-output-sqs (6.0.0)
logstash-output-stdout (3.1.4)
logstash-output-syslog (3.0.5)
logstash-output-tcp (6.0.0)
logstash-output-udp (3.1.0)
logstash-output-webhdfs (3.0.6)
logstash-patterns-core (4.1.2)
```
実行結果から、例えば`logstash-codec-*` ではオフロードで使用可能な codec の一覧を、`logstash-output-*` ではオフロードで使用可能なプロトコルの一覧を参照することができます。

# おわりに
以上、分析データに使用可能なプラグイン一覧を参照する方法について記載しました。

様々なプラグインに対応していることがわかりましたが、現時点ではあくまでも前述した**4種類のサード・パーティー・システムのみ**が公式にサポートされますので十分にご留意ください。

機会があれば、サポートされるサード・パーティー・システムへの分析データのオフロード方法について記載したいと思います。

# 参照
[Planning to offload data to a third-party system](https://www.ibm.com/docs/en/api-connect/10.0.1.x?topic=topology-planning-offload-data-third-party-system)
[API Connect components - API Analytics](https://www.ibm.com/docs/en/api-connect/10.0.1.x?topic=concepts-api-connect-components#capim_overview_apiconnectcomponents__section_analytics)