UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【GCE】Springのログがでない

GCE上でSpringバッチを動かそうとしたが、おそらく何らかのエラーが発生して処理が終了していた

原因を調査するためにCloud Loggingをみてみたが、Springバッチが起動した形跡(あのアスキーアートなど)がなく、インスタンス削除が行われた形跡があった

となるとdocker imageが壊れているか、とにかくSpringバッチ側の問題ではないだろうと思っていたが全く原因が不明だった

もう少し調べみるとバッチではBigQueryにテーブルを作る処理があるのだが、そのテーブルが作成されているのでSpringは起動していることがわかった

そうなると、出ていないだけで実際は起動していることになるので、なぜかSpringのログがでていない問題とわかった

結果的に

結果的に、SpringのログをLoggingに送信する前に、自動インスタンス削除が走っていたことが原因だった

公式ドキュメントは見つからなかったが、GCEのインスタンスにFluentdがデプロイされ、FluentdではCloud Loggingにログを送信している仕組みらしいので

FluentdからCloud Loggingにログを送信する前にインスタンスが削除されると、そのログはロストしてしまう

これが原因だった

なので、Springのmainの実行を2分ほどスリープさせてから行うようにしてみたところログがCloud Loggingに表示された

    try {
      final int interval = 120;
      TimeUnit.SECONDS.sleep(interval);
      System.out.println("Waiting...");
    } catch (InterruptedException e) {
      System.err.println(e.getMessage());
      throw new RuntimeException(e);
    }
    SpringApplication.run(MyBatchApplication.class, args);