銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

SQL Server のLinux dockerコンテナでの基本診断情報の集め方

ひとりAdvent Calendar 19日目です。

adventar.org

前日の記事の半分続きで、今度はSQL Serverをdockerコンテナで動かしている場合の集め方です。

といっても集める対象のファイルは基本変わりません。今回はOpenShift上で動かしているSQL Serverコンテナを対象にするので、コンテナ内でコマンドを実行するのにoc execを使いますが、docker単体の場合はdocker exec、kubernetesの場合はkubectl execを利用することができます。こんな感じで動いています。

f:id:tanaka733:20181217112517p:plain

OpenShift, kubernetesの場合はpod名、dockerの場合はコンテナ名を取得しておきます。

f:id:tanaka733:20181217113452p:plain

まずは、mssql.confファイルを確認してログファイルなどの場所を変更していないか確認します。mssql.confの場所はデフォルト/var/opt/mssql/mssql.confで、変更している場合はDockerfileや起動コマンドなどに記述があるのではないかと思います*1

$ oc exec testservermssql-5-hfh9r -- cat /var/opt/mssql/mssql.conf

f:id:tanaka733:20181217113543p:plain

で、ログを確認します。

$ oc exec testservermssql-5-hfh9r -- tail /var/opt/mssql/log/errorlog

f:id:tanaka733:20181217114153p:plain

ログなどのファイル一覧を手元のマシンにコピーしたい場合、OpenShiftだとoc rsyncコマンドが使えます。

$ mkdir dblog
$ oc rsync testservermssql-5-hfh9r:/var/opt/mssql/log/ dblog/

f:id:tanaka733:20181217114510p:plain

また、SQL ServerのPALロギングはプロセス再起動が必要ないため、コンテナ上であってもログの設定ファイルを追加するだけで有効にできて便利です。oc rshでログインしてファイルを作成するか、手元で用意したファイルを転送します。

$ oc rsh testservermssql-5-hfh9r
# vi /var/opt/mssql/logger.ini

[Output:Console]
Type = StdOut

[Logger]
Level = Debug
Outputs = Console

f:id:tanaka733:20181217121001p:plain

コンテナの標準出力に出力しているので、oc logs (kubectl logs docker logs)コマンドなどで確認できます。

f:id:tanaka733:20181217121052p:plain

*1:変更することがあまりないと思うので詳細な手順は未確認