#初めに
今回この記事を書こうと思ったのは、openshift上でfluentd-kafka-?のようなログ収集基盤を作成したいと思いウェブの記事を探しながら作成したのですが、一切見つかりませんでした。(私の検索力が低いだけかもしれませんが・・・)
なので、今後再度作りたいと思ったときに再現できるようとして備忘録かつこの基盤を作成したくて困っている人に対して少しでも救いになればと思い今回の記事を作成しました。
#作成方法
今回は、fluentd-kafka-s3sinkconnect,postgresのログ収集基盤を作成していきたいと思います。
#kafka cluster作成
openshiftWebコンソールでoperatorからkafkaを選択、設定を変えずに作成
#S3plugin,postgresplugin,fluentdのビルド
それぞれのDockerfileを作成する。
fluentdは以下のURLを見本に作成すると簡単にできると思います。
https://github.com/fluent/fluentd-docker-image
s3は以下のURLを見本に作成すると簡単にできると思います。
https://github.com/confluentinc/kafka-connect-storage-cloud/tree/master/kafka-connect-s3
postgresは以下のURLを見本に作成すると簡単にできると思います。
https://github.com/jcustenborder/kafka-connect-cdc-postgres
s3とpostgresは作成したファイルを/var/kafka/pluginsの配下にコピーして配置するDockerfileを作成します。
作成したファイルのあるフォルダに移動して以下のコマンドを押下します。
https://thinkit.co.jp/article/15696
例:fluetndの場合(fluentdの部分はビルドしたい対象によって変わります。)
oc new-build --name=fluentd --strategy=docker
oc start-build fluentd --from-dir=. --follow
以上でopenshift用のイメージは作成することが出来ます。
デプロイメントで実行したい場合は以下のコマンドで実行できます。
oc new-app fluentd
#kakfaconnectの作成
webconsoleのkafkaconnectを選択名前を設定後yaml記述に画面を変更して spec の下に以下を記述します。
ここが作成時につまづきました。
この記述を行わないとkafkaconnectでメッセージを複数の場所に送りたいときバグが起きます。
config:
config.storage.topic: postgres-configs
group.id: postgres
offset.storage.topic: postgres-offsets
status.storage.topic: postgres-status
image: >-
image-registry.openshift-image-registry.svc:~~~~~~~~
imageはwebコンソールにあるイメージストリームタグにあるイメージリポジトリーorパブリックイメージリポジトリーを用いてください
#メッセージを保存するkafkatopicの作成
webコンソールでfluentdで指定したtopic名で作成します。
#jsonで設定を行う
作成されたpodに入り、そのpodのIPアドレスに対してcurlで設定値を送る
例:postgresの場合
echo '{
"name":"sink-connect-jdbc-postgres",
"config":{
"group.id": "postgres",
"connector.class": "hogehoge",
"connection.url": "hogehoge",
"connection.password": "hogehoge",
"db.name": "hogehoge",
"topics": "hogehoge",
"task.max": "hogehoge",
"insert.mode": "insert",
"max.retries": "1"
}
}
'|curl -x POST -d @-http://podIP/connectors --header "content-Type:application/json"