カピバラ好きなエンジニアブログ

興味ある技術とか検証した内容を赴くままに書いていきます。カピバラの可愛さこそ至高。

Digdag Serverの実行ログをAWS S3に出力する

前回の記事でDigdag Serverを設定しましたが、サーバのログをローカルに保持し続けていると、障害時のログ確認にいちいちサーバにログインする手間が発生してしまいます。

そこで今回はdigdagの実行ログをAWSのS3に出力するように設定します。(以降Digdagはdigdagと表記します)

www.capybara-engineer.com


実施作業

digdagサーバ起動

設定しますといいましたが、設定内容的にはかなりシンプルで、前回サーバを起動するのに使用した定義ファイルに必要なパラメータを追加するだけでS3に送ることができます。

設定可能なパラメータは以下リンクの「Server-mode commands」に記載しています。
docs.digdag.io


実際に設定したパラメータはこちらです。
f:id:live-your-life-dd18:20201028094218p:plain

server.access-log.path=C:\opt\digdag\logs\accesslog
database.type=postgresql
database.user=digdag_role
database.password=digdag_pass
database.host=localhost
database.port=55432
database.database=digdag_db
database.maximumPoolSize=32
log-server.type=s3
log-server.s3.bucket=digdag-logs-1
log-server.s3.path=server-log
log-server.s3.credentials.access-key-id=ABCDEFGHIJKLMNOPQSTUVWXYZ
log-server.s3.credentials.secret-access-key=ABCDEFGHIJKLMNOPQSTUVWXYZ
archive.type=s3
archive.s3.bucket=digdag-logs-1
archive.s3.path=server-archive
archive.s3.credentials.access-key-id=ABCDEFGHIJKLMNOPQSTUVWXYZ
archive.s3.credentials.secret-access-key=ABCDEFGHIJKLMNOPQSTUVWXYZ



少し数が多いので順番に説明します。

まず以下はサーバのアクセスログの出力場所を指定しています。S3には直接出力できないようなので、ローカルになっています。

server.access-log.path=C:\opt\digdag\logs\accesslog


次がDBの設定になります。
大体前回の記事で設定したものですが、1つコネクション数の制限のためmaximumPoolSizeというパラメータを追加しています。

database.type=postgresql
database.user=digdag_role
database.password=digdag_pass
database.host=localhost
database.port=55432
database.database=digdag_db
database.maximumPoolSize=32



このパラメータでログの出力先を指定しています。
typeでs3を設定すると出力先がS3に設定され、残りのパラメータで具体的な出力先情報・認証情報を設定しています。

log-server.type=s3
log-server.s3.bucket=digdag-logs-1
log-server.s3.path=server-log
log-server.s3.credentials.access-key-id=ABCDEFGHIJKLMNOPQSTUVWXYZ
log-server.s3.credentials.secret-access-key=ABCDEFGHIJKLMNOPQSTUVWXYZ



以下のパラメータでは、実行が完了したタスクデータのアーカイブにS3を使用するように設定しています。
デフォルトではPostgreSQLのDB内に格納されますが、S3に出力できそうでしたので、ついでに設定してみました。

archive.type=s3
archive.s3.bucket=digdag-logs-1
archive.s3.path=server-archive
archive.s3.credentials.access-key-id=ABCDEFGHIJKLMNOPQSTUVWXYZ
archive.s3.credentials.secret-access-key=ABCDEFGHIJKLMNOPQSTUVWXYZ



ここまで出来たら以下のコマンドを実行して、サーバを起動します。

digdag server --config .\server.properties

f:id:live-your-life-dd18:20201028102326p:plain


起動できたらサーバにブラウザからアクセスできることを確認します。

http://localhost:65432/

f:id:live-your-life-dd18:20201028102659p:plain


出力先のS3は事前に作成しておきます。
f:id:live-your-life-dd18:20201028122330p:plain

workflow作成・実行

今回ログの出力を確認するにあたって実際にdigdagのworkflowを作成する必要があります。
そのために、公式ページの「Running sample workflow」に記載されているサンプルworkflowを使用します。
具体的な手順は省略しますが、.digファイルがあればOKです。
docs.digdag.io


サンプルworkflowファイルができたら、サーバにアップロードします。(手順は省略します)
f:id:live-your-life-dd18:20201028105350p:plain


digdagサーバのWorkflowページでRUNボタンを押下し、workflowの実行が完了したことを確認します。
f:id:live-your-life-dd18:20201028110631p:plain

S3確認

サーバの実行ログを出力するフォルダを確認するとファイルが作成されていることが確認できました。
f:id:live-your-life-dd18:20201028112552p:plain


アップロードされたファイルを解凍してみてみると以下のようなログが出力されています。
f:id:live-your-life-dd18:20201028113323p:plain


手動で実行した場合は以下のようにコンソールに出力されます。
f:id:live-your-life-dd18:20201028113706p:plain


1ファイルに以下のような1つの処理の出力が記載されているので、workflowで実行される出力される1処理に対して1ファイルが出力されているようです。

2020-10-28 02:36:25 +0000 [INFO] (0016@[0:default]+sample+repeat^sub+for-0=order=0=first&1=animal=0=dog): echo>: first dog
first dog



アーカイブ用のS3は2つのファイルが出力されていることが確認できました。
f:id:live-your-life-dd18:20201028120921p:plain

感想及び所感

ということで、digdagで実行したログをS3に出力してみました。

てっきり1ファイルで出力されるものかと思ってましたが、1つの処理に対してログを出力しているようなので、アップロードのコストが余計にかかってしまう部分は気になりました。