(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【LogDNA/API】curlで取得したタイムスタンプを時刻データに変換するワンライナー

スポンサーリンク

はじめに

LogDNAではAPIをcurlコマンドで叩くことでCUIで情報を扱えます。
しかしデフォルトでは時間情報がUNIXタイムスタンプなのでそれを日付情報に変換しながら情報を簡易的に出力するワンライナーを作成しました。

環境情報
GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin)

事前準備

対象のLogDNAに対してcurlコマンドで値を取得するためにGUIからサービスキーを発行します。
既に発行している場合はクリップボードにコピー可能で、無い場合でも"Generate Service Key"を押下すると生成されます。

それを引数に以下のようにcurlコマンドを押下すると

$ curl -sS "https://api.jp-tok.logging.cloud.ibm.com/v1/export?from=$(($(date +%s)-3600))000&to=$(date +%s)000&query=file:/var/log/kubelet.log&size=3" -u "SERVICE_KEY:XX" | jq -r '[._ts,._host,._line]|@csv' | tac

1時間以内で"file:/var/log/kubelet.log"という検索条件で最近の3件が時系列(下が最新)で表示されます。

1628169714425,"kube-XX","kubelet.service[9488]: XX ..."
1628169714593,"kube-XX","kubelet.service[9669]: XX ..."
1628169715676,"kube-XX", "kubelet.service[9057]: XX ..."

尚、jqコマンドのところで出力する部分は制御可能で何も入れないと全ての情報が表示されます。

時刻データを変換するワンライナー

先頭列がUNIXタイムなのでこれを以下のsed/awkで変換します。

ワンライナーは以下。

$ curl -sS "https://api.jp-tok.logging.cloud.ibm.com/v1/export?from=$(($(date +%s)-3600))000&to=$(date +%s)000&query=file:/var/log/kubelet.log&size=3" -u "SERVICE_KEY:XX" | jq -r '[._ts,._host,._line]|@csv' | tac | sed -e 's/^\(.\{10\}\)/\1./' | awk 'BEGIN{FS=",";OFS=" "}{print strftime("%c",$1),$1="",$0}'

出力結果は以下のように可読性に優れたものになります。

Thu Aug  5 22:22:22 2021   "kube-XX" "kubelet.service[9488]: ...
Thu Aug  5 22:27:23 2021   "kube-XX" "kubelet.service[9035]: ..."
Thu Aug  5 22:27:24 2021   "kube-XX" "kubelet.service[9391]: ..."

終わりに

LogDNAをAPIでエクスポートする際はタイムスタンプの扱いが厄介ですが、上記ワンライナーを使えば日付情報を可視化してログを流し読みすることが可能です。特にLogDNAは環境によってはGUIが重いため、このようにCUIでログを取り出せるようにしておくのはオススメです。

以上、ご参考ください。