You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制仅向Datadog发送指定MuleSoft环境的API日志

解决方案:MuleSoft CloudHub日志过滤发送至Datadog

一、过滤设置的最佳位置:MuleSoft log4j2.xml 源头过滤

要只发送UAT和Prod环境的日志到Datadog,最高效的方式是在日志输出源头(log4j2配置)做环境判断过滤,避免非目标环境的日志产生不必要的流量和存储成本。具体实现步骤如下:

1. 配置CloudHub环境变量

在CloudHub的每个应用环境(DEV/TEST/UAT/Prod)中,添加系统属性(比如ENV_NAME),对应设置值为环境标识:

  • DEV环境:ENV_NAME=DEV
  • TEST环境:ENV_NAME=TEST
  • UAT环境:ENV_NAME=UAT
  • Prod环境:ENV_NAME=PROD

2. 修改log4j2.xml添加过滤器

在你的Datadog Appender中添加过滤器,仅当环境为UAT或Prod时,才允许日志发送到Datadog。以下是两种实现方式:

方式1:使用ScriptFilter(灵活适配多环境判断)

<Configuration>
  <Properties>
    <!-- 读取CloudHub系统属性中的环境标识 -->
    <Property name="env">${sys:ENV_NAME}</Property>
  </Properties>

  <Appenders>
    <!-- Datadog日志发送Appender -->
    <Http name="DatadogAppender" url="https://http-intake.logs.datadoghq.eu/api/v2/logs?host=localhost&ddsource=Mulesoft&service=TestApp&ddtags=env:${env}">
      <Headers>
        <Header name="DD-API-KEY" value="${sys:DD_API_KEY}"/> <!-- 用系统变量注入API密钥,避免硬编码 -->
        <Header name="Content-Type" value="application/json"/>
      </Headers>
      <JsonLayout compact="true"/>
      <!-- 过滤器:仅UAT/Prod环境的日志允许发送 -->
      <ScriptFilter onMatch="ACCEPT" onMismatch="DENY">
        <Script language="JavaScript">
          <![CDATA[
            var env = configuration.getProperty("env");
            return env === "UAT" || env === "PROD";
          ]]>
        </Script>
      </ScriptFilter>
    </Http>

    <!-- 其他Appender(如控制台)保留原有配置 -->
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d %-5p %c{1} - %m%n"/>
    </Console>
  </Appenders>

  <Loggers>
    <Root level="INFO">
      <AppenderRef ref="Console"/>
      <AppenderRef ref="DatadogAppender"/>
    </Root>
  </Loggers>
</Configuration>

方式2:使用PropertyFilter(规则更直观)

<Http name="DatadogAppender" url="https://http-intake.logs.datadoghq.eu/api/v2/logs?host=localhost&ddsource=Mulesoft&service=TestApp&ddtags=env:${env}">
  <!-- 其他配置(Headers、Layout)同上 -->
  <!-- 匹配UAT环境则接受,不匹配则继续判断 -->
  <PropertyFilter property="env" value="UAT" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
  <!-- 匹配Prod环境则接受,不匹配则拒绝 -->
  <PropertyFilter property="env" value="PROD" onMatch="ACCEPT" onMismatch="DENY"/>
</Http>

二、关于Datadog采集URL的参数说明

Datadog的日志采集URL(https://http-intake.logs.datadoghq.eu/api/v2/logs)提供的查询参数(如host、ddsource、service、ddtags)仅用于给日志添加元数据标签,方便后续在Datadog平台中查询、聚合日志,没有专门用于控制是否发送日志的参数。

如果仅依赖Datadog平台侧过滤,只能在接收日志后通过日志排除规则丢弃非目标环境的日志,但这种方式仍会产生不必要的网络流量和存储成本,因此不推荐。

内容的提问来源于stack exchange,提问作者Triumph Spitfire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 12:35:17