簡體   English   中英

Airflow PostgresOperator 安全——不遵守執行超時? 如果花費太長時間,如何殺死數據庫中的進程?

[英]Airflow PostgresOperator Safety -- execution_timeout not respected? How to kill process in DB if it's taking too long?

致力於在我的公司實施 Airflow,但在連接到我們的產品數據庫之前需要執行一些安全檢查。 有人擔心部署愚蠢的 SQL 並占用太多資源。 我的想法是 PostgresOp 任務上的execution_timeout設置將:

  1. 任務失敗
  2. 殺死數據庫中的查詢進程

我發現兩者都不是真的。

代碼:

with DAG(
    # Arguments applied to instantiate this DAG. Update your values here
    # All parameters visible in airflow.models.dag
    dag_id=DAG_ID,
    default_args=DEFAULT_ARGS,
    dagrun_timeout=timedelta(minutes=20),
    start_date=days_ago(1),
    schedule_interval=None,
    tags=['admin'],
    max_active_runs=1
) as dag:

    kill_test = PostgresOperator(
        task_id="kill_test",
        execution_timeout=timedelta(seconds=10),
        postgres_conn_id="usa_db",
        sql="""
SET application_name to airflow_test;
<SELECT... intentionally long running query> ;
        """)

Airflow 超時后任務不會失敗。 即使我在 UI 中手動使任務失敗,它也不會終止 Postgres 數據庫中的查詢。 這里有什么交易? 有沒有辦法采取安全措施來硬殺死數據庫中 Airflow 啟動的 Postgres 查詢?

我沒有在這里發帖,但我檢查了:

  1. Airflow UI 顯示任務實例持續時間超過執行超時
  2. pg_stat 活動以確認查詢正在運行超過執行超時

我猜你正在尋找這個參數runtime_parameters={'statement_timeout': '180000ms'} 。( airflow 示例

我不知道這是在哪個版本中添加的,但是如果您將apache-airflow-providers-postgres模塊更新到最新版本,則可以使用上述參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM