コンテンツにスキップ

eprx-market-not-ingested

サービス
クラウド - アプリ
severity
criticalurgency high
出所
worker
スコープ
ALL
dedup_key
batch:eprx-market-not-ingested:backend

一次対応

まず当該 block_date の行が「無い」のか「あるが列が空」のかを見る(runbook の切り分けクエリ)。無いなら EPRX に翌日分が出ているか確認して fetch-eprx-market-data を再実行、まだ出ていなければ公開を待つ(15:00 の取り込みは同日に再試行しない)。あるが空なら再実行では直らない — 取り込みは ON CONFLICT DO NOTHING なので、当該 block_date を DELETE してから AppEprxCli の fetch-market-data --fiscal-year でバックフィルする

現在 prd はシャドー運用である。このチェックは PagerDuty に送らず、ログに残すだけ(DRY_RUN)。したがってこのページを開いている状況は通常「ログを読みに来た」ときであり、鳴っていないことは正常の証拠にならない。16:00 の不足が取り込みの故障なのか EPRX の公開遅れなのかを見分けられるようになった時点で解除する。判断は #4257。

見ているのは入札ではなく、価格評価(JEMS-0082)の入力である。毎日 15:00 の fetch-eprx-market-data が翌日分(受渡日 D+1)の市場データを書き、その揃いを 16:00 と 18:00 に確かめる。欠けても入札は止まらないので、誰も気づかないまま採点だけが空になる。それを防ぐための発報である。

custom_details には 3 つの不足リストが入る。どれか 1 つでも空でなければ発報する。

  • primary_short_areas — 一次調整力(PRIMARY_ONLINE)の行が 48 ブロック揃っていない、または件数・量・必要量の列が欠けているエリア
  • compound_short_areas — 複合商品(COMPOUND)の応札量が揃っていないエリア
  • missing_tielines — 直近 30 日に読める DAM の行があった連系線のうち、翌日分が 48 ブロック揃っていないもの。行があっても限度と確保量が空なら空容量が計算できず、価格評価は行が無いのと同じに落とすので、ここでも不足として数える

まず確かめるのは EPRX 側に翌日分が公開されているかである。約定処理は実需給前日 15:00 までに終わるが、公開が遅れる日は 15:00 の取り込みが空振りし、同日の再試行は無い。この場合は取り込みの故障ではなく、公開待ちである。

3 つのリストが全エリア・全連系線を含むなら、取り込みジョブ自体が動いていない。JobRunr ダッシュボードで fetch-eprx-market-data の失敗と recurring-job-not-running の発報を見る。

先に「行が無い」のか「行はあるが列が空」のかを見分ける。手順が違う。

取り込みは INSERT ... ON CONFLICT DO NOTHING で、既存行を上書きしない。そして CSV の空セルは null になるが行自体は作られる(EprxMarketCsvParser)。したがって空の列を持つ行が一度入ると、再実行しても DO NOTHING で素通りし、何度回しても直らない。この監視が「行はあるが使えない」を不足として数える以上、ここを取り違えると再実行を繰り返すだけになる。

-- 翌日分・一次調整力を、エリアごとに「行数」と「使えない行数」で並べる
SELECT a.code AS area, count(*) AS rows,
count(*) FILTER (WHERE p.bid_count_local IS NULL OR p.awarded_count_local IS NULL
OR p.bid_mw_local IS NULL OR p.awarded_mw_local IS NULL OR p.required_mw_tso IS NULL
OR (p.awarded_count_local > 0 AND p.max_price_local IS NULL)) AS unusable
FROM agg.eprx_market_product p JOIN agg.area a ON a.id = p.area_id
WHERE p.block_date = (now() AT TIME ZONE 'Asia/Tokyo')::date + 1
AND p.product_code = 'PRIMARY_ONLINE'
GROUP BY a.code ORDER BY a.code;

rows が 48 未満 → 行が無い。EPRX に翌日分が出ていれば JobRunr から fetch-eprx-market-data を再実行すれば埋まる。次の 18:00 の確認で解消していれば自動で resolve される。

rows が 48 で unusable が 0 でない → 行はあるが空。再実行では直らないので、当該 block_date を消してからバックフィルする。連系線側(missing_tielines)が残る場合も agg.eprx_market_tieline_value に対して同じことをする。

Terminal window
# app-ops 上で。CP と APP_CRYPT_PASSPHRASE は docs/ops/サイト追加手順書.md と同じ要領
psql "$DATABASE_URL" -c "DELETE FROM agg.eprx_market_product WHERE block_date = 'YYYY-MM-DD'"
APP_ENV=prd java -cp "$CP" co.pplc.aggregator.jp.batch.AppEprxCliKt \
fetch-market-data --fiscal-year YYYY # 受渡日の年度(4 月始まり)

どちらでもなお不足が残るなら、取り込みジョブのログを読む。特定エリアだけ欠けるなら公開 CSV の形式変更、連系線だけ欠けるなら連系線ファイルの取得失敗を疑う。

EPRX の公開そのものが翌日 15:00 を過ぎても無い場合は、EPRX 側の障害であり、こちらで直せるものは無い。価格評価は当日分を NOT_INGESTED として扱い、後日のバックフィルで採点できる行に変わる。

まだない。