雲のメモ帳

猫とクラウドと旅行が好きなインフラエンジニアです。 日々の調べたことや興味が持ったことをこのブログにアウトプットします。

Kinesis Data Firehose とSplunkを連携する際にハマったところ

これはなに?

CloudWatchlogs上のログを、Kinesis Data Firehose経由で、Splunkに連携する検証をしていたところ思わぬところでハマったので、その内容について書きます。
Cloudwatchlogsのサブスクリプションの設定やKinesisの設定手順は、以下のチュートリアルを参考にしたのでそちらご覧ください。
チュートリアル: Amazon Kinesis Data Firehose を使用して Splunk に VPC フローログを送信する - Amazon Kinesis Data Firehose

問題①

Kinesis Data Firehose で、Splunk CloudのHEC endpoint までアクセスできない。

接続環境: Splunk Cloud(試用版)

{
    "deliveryStreamARN": "arn:aws:firehose:ap-northeast-1:xxxxxx:deliverystream/xxxxxx",
    "destination": "https://xxx.splunkcloud.com:443",
    "deliveryStreamVersionId": 1,
    "message": "Failed to deliver data to Splunk or to receive acknowledgment. Make sure HEC endpoint is reachable from Firehose and it is healthy.",
    "errorCode": "Splunk.MaxRetriesFailed",
    "processor": "arn:aws:lambda:ap-northeast-1:xxxxxxxx:function:xxxxxxxx:$LATEST"
}

f:id:ykoomaru:20200812221317p:plain

原因

コミュニティの情報を漁っていたところ、試用版のSplunkCloudでは、エンドポイントが利用できないとの回答があり、これが原因でした。
マニュアルにも載っていなくて調査に時間かかりました。。。

You will not be able to send Kinesis Data Firehose to the trial Splunk Cloud instances. If you want to test this out, please contact your team and they can help you validate it through a Splunk Cloud POC.

community.splunk.com

対処方法

コミュニティの回答が曖昧で分かりにくいですが、ライセンス買うか、Splunkに連絡してPoCのライセンス発行しろって感じですかね。

サクッと検証したかったので、Splunk Cloudを利用するのは一旦あきらめて、マケプレにあったSplunk Enterpriseで再検証しました。

問題②

Splunk Enterpriseでもハマり、今度は、SplunkKinesis Data Firehoseで、Splunk接続時に証明書エラーとなりアクセスできず。

{
    "deliveryStreamARN": "arn:aws:firehose:ap-northeast-1:xxxxxx:deliverystream/xxxxxx",
    "destination": "https://xxx.xxx.xxx.xxx:8000",
    "deliveryStreamVersionId": 9,
    "message": "Could not connect to the HEC endpoint. Make sure that the certificate and the host are valid.",
    "errorCode": "Splunk.SSLHandshake",
    "processor": "arn:aws:lambda:ap-northeast-1:xxxxxxxx:function:xxxxxxxx:$LATEST"
}

f:id:ykoomaru:20200812221336p:plain

原因

Kinesis Data FirehoseからアクセスするSplunk EnterpriseのHECエンドポイントは、証明書が有効なものである必要があるらしい。
検証でSSL証明書を準備してなかったので、これが原因でした。

接続環境: Splunk Enterprise (試用版) on EC2

以下参考ドキュメント。

Amazon Kinesis Firehose requires HTTP Event Collector (HEC) endpoint to be terminated with a valid CA-signed certificate matching the DNS hostname used to connect to your HEC endpoint. If you are seeing an error message "Could not connect to the HEC endpoint. Make sure that the HEC endpoint URL is valid and reachable from Kinesis Firehose," then your SSL certificate might not be valid. 

docs.splunk.com

対処方法

なるべく安く早く検証したかったので、Splunk Enterpriseの前段にELBを置いて、ACMで取得したSSL証明書さしました。
以下のような構成。

f:id:ykoomaru:20200812221348p:plain

結果 ➡ Splunkまでデータ連携できました!

最後に

Splunk初めて触ったのですが、スキーマを事前に定義しないでも、ログの構造を自動で理解してて感動しました。これから使う機会増えそうだから、もう少し触ってみる。