收集 Microsoft Exchange 日志

支持的平台:

本文档介绍了如何使用 Bindplane 将 Microsoft Exchange 日志注入到 Google Security Operations。注入标签用于标识将原始日志数据标准化为结构化 UDM 格式的解析器。本文档中的信息适用于具有 EXCHANGE_MAIL 注入标签的解析器。

准备工作

请确保满足以下前提条件:

  • Google SecOps 实例
  • 安装了 Microsoft Exchange Server 的 Windows Server 2016 或更高版本
  • 对 Exchange Server 的管理员访问权限
  • 如果通过代理运行,请确保防火墙端口已根据 Bindplane 代理要求打开

获取 Google SecOps 注入身份验证文件

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 收集代理
  3. 下载注入身份验证文件。将文件安全地保存在将要安装 Bindplane 的系统上。

获取 Google SecOps 客户 ID

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 个人资料
  3. 复制并保存组织详细信息部分中的客户 ID

安装 Bindplane 代理

按照以下说明在 Windows 操作系统上安装 Bindplane 代理。

Windows 安装

  1. 以管理员身份打开命令提示符PowerShell
  2. 运行以下命令:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet

其他安装资源

  • 如需了解其他安装选项,请参阅此安装指南

配置 Bindplane 代理以收集 Windows 事件日志并将其发送到 Google SecOps

  1. 访问配置文件:

    • 找到 config.yaml 文件。在 Windows 上,它通常位于 `C:\Program Files\observIQ OpenTelemetry Collector` 目录中。
    • 使用文本编辑器(例如记事本或 Notepad++)打开该文件。
  2. 按如下方式修改 config.yaml 文件:

    receivers:
      windowseventlog/exchange_application:
        channel: Application
        raw: true
        max_reads: 100
        poll_interval: 5s
        start_at: end
    
      windowseventlog/exchange_system:
        channel: System
        raw: true
        max_reads: 100
        poll_interval: 5s
        start_at: end
    
      windowseventlog/exchange_management:
        channel: MSExchange Management
        raw: true
        max_reads: 100
        poll_interval: 5s
        start_at: end
    
    processors:
      batch:
    
    exporters:
      chronicle/exchange:
        compression: gzip
        # Adjust the path to the credentials file you downloaded earlier
        creds_file_path: 'C:\path\to\ingestion-authentication-file.json'
        # Replace with your actual customer ID
        customer_id: <PLACEHOLDER_CUSTOMER_ID>
        endpoint: <YOUR_REGIONAL_ENDPOINT>
        # Add ingestion labels for Exchange logs
        log_type: 'EXCHANGE_MAIL'
        raw_log_field: body
        ingestion_labels:
    
    service:
      pipelines:
        logs/exchange:
          receivers:
            - windowseventlog/exchange_application
            - windowseventlog/exchange_system
            - windowseventlog/exchange_management
          processors:
            - batch
          exporters:
            - chronicle/exchange
    

配置说明

  • 应用渠道:从 Exchange Server 收集应用级事件,包括服务启动、错误和警告。
  • 系统渠道:收集可能会影响 Exchange Server 运行的系统级事件。
  • MSExchange 管理渠道:收集特定于 Exchange 的管理事件,包括 PowerShell cmdlet 执行和管理操作。
  • raw: true:以原始格式发送完整的 Windows 事件日志条目,以便进行全面解析。
  • start_at: end:从当前时间点开始收集新事件(不注入历史日志)。

重启 Bindplane 代理以应用更改

  • 如需在 Windows 中重启 Bindplane 代理,您可以使用服务控制台,也可以以管理员身份输入以下命令:

    net stop "observIQ OpenTelemetry Collector" && net start "observIQ OpenTelemetry Collector"
    

UDM 映射

日志字段 UDM 映射 逻辑
c-ip read_only_udm.target.asset.ip 从“c-ip”字段中获取的值
c-ip read_only_udm.target.ip 从“c-ip”字段中获取的值
client-hostname read_only_udm.principal.asset.hostname 从“client-hostname”字段中获取的值
client-hostname read_only_udm.principal.hostname 从“client-hostname”字段中获取的值
client-ip read_only_udm.principal.asset.ip 从“client-ip”字段中获取的值
client-ip read_only_udm.principal.ip 从“client-ip”字段中获取的值
第 1 列 read_only_udm.metadata.event_timestamp 从“column1”字段中获取的值
column10 read_only_udm.intermediary.resource.attribute.labels.value 从“column10”字段中获取的值
column11 read_only_udm.network.email.mail_id 从“column11”字段中获取的值
column12 read_only_udm.additional.fields.value.string_value 从“column12”字段中获取的值
column13 read_only_udm.network.email.to 从“column13”字段中获取的值
column13 read_only_udm.target.user.email_addresses 从“column13”字段中获取的值
column15 read_only_udm.additional.fields.value.string_value 从“column15”字段中获取的值
column16 read_only_udm.target.resource.attribute.labels.value 从“column16”字段中获取的值
column19 read_only_udm.network.email.subject 从“column19”字段中获取的值
第 2 列 read_only_udm.principal.asset.ip 从“column2”字段中获取的值
第 2 列 read_only_udm.principal.ip 从“column2”字段中获取的值
column20 read_only_udm.network.email.from 从“column20”字段中获取的值
column20 read_only_udm.principal.user.email_addresses 从“column20”字段中获取的值
column21 read_only_udm.security_result.detection_fields.value 从“column21”字段中获取的值
column22 read_only_udm.security_result.description 从“column22”字段中获取的值
column24 read_only_udm.additional.fields.value.string_value 从“column24”字段中获取的值
column25 read_only_udm.principal.asset.ip 从“column25”字段中获取的值
column25 read_only_udm.principal.ip 从“column25”字段中获取的值
column26 read_only_udm.target.asset.ip 从“column26”字段中获取的值
column26 read_only_udm.target.ip 从“column26”字段中获取的值
column27 read_only_udm.security_result.detection_fields.value 从“column27”字段中获取的值
column28 read_only_udm.additional.fields.value.string_value 从“column28”字段中获取的值
column29 read_only_udm.metadata.product_log_id 从“column29”字段中获取的值
第 3 列 read_only_udm.principal.asset.hostname 从“column3”字段中获取的值
第 3 列 read_only_udm.principal.hostname 从“column3”字段中获取的值
column30 read_only_udm.metadata.product_version 从“column30”字段中获取的值
column4 read_only_udm.target.asset.ip 从“column4”字段中获取的值
column4 read_only_udm.target.ip 从“column4”字段中获取的值
column5 read_only_udm.target.asset.hostname 从“column5”字段中获取的值
column5 read_only_udm.target.hostname 从“column5”字段中获取的值
column6 read_only_udm.metadata.event_timestamp 从“column6”字段中获取的值
column6 read_only_udm.network.http.response_code 从“column6”字段中获取的值
column6 read_only_udm.network.session_id 从“column6”字段中获取的值
column6 read_only_udm.metadata.description 从“column6”字段中获取的值
column7 read_only_udm.additional.fields.value.string_value 从“column7”字段中获取的值
column8 read_only_udm.additional.fields.value.string_value 从“column8”字段中获取的值
column9 read_only_udm.metadata.product_event_type 从“column9”字段中获取的值
connector_id read_only_udm.additional.fields.value.string_value 从“connector-id”字段中获取的值
cs-method read_only_udm.network.http.method 从“cs-method”字段中获取的值
cs-uri-query read_only_udm.target.url 从“cs-uri-query”字段中获取的值
cs-uri-stem read_only_udm.target.url 从“cs-uri-stem”字段中获取的值
csReferer read_only_udm.network.http.referral_url 从“csReferer”字段中获取的值
csUser-Agent read_only_udm.network.http.user_agent 从“csUser-Agent”字段中获取的值
cs-username read_only_udm.principal.user.userid 从“cs-username”字段中获取的值
custom-data read_only_udm.security_result.detection_fields.value 从“custom-data”字段中获取的值
数据 read_only_udm.security_result.about.labels.value 从“data”字段中获取的值
数据 read_only_udm.security_result.description 从“data”字段中获取的值
数据 read_only_udm.network.email.from 从“data”字段中获取的值
数据 read_only_udm.network.email.to 从“data”字段中获取的值
数据 read_only_udm.target.hostname 从“data”字段中获取的值
数据 read_only_udm.security_result.description 从“data”字段中获取的值
数据 read_only_udm.network.sent_bytes 从“data”字段中获取的值
数据 read_only_udm.target.user.email_addresses 从“data”字段中获取的值
日期 read_only_udm.metadata.event_timestamp 从“date”和“time”字段中获取的值
date-time read_only_udm.metadata.event_timestamp 从“日期时间”字段中获取的值
DeliveryLatency read_only_udm.security_result.detection_fields.value 从“custom-data”或“message-info”中的“DeliveryLatency”字段获取的值
DeliveryPriority read_only_udm.security_result.detection_fields.value 从“custom-data”中的“DeliveryPriority”字段或“column21”字段中获取的值
DeliveryPriority read_only_udm.security_result.priority 如果“DeliveryPriority”为“Low”或“Normal”,则为“LOW_PRIORITY”;如果“DeliveryPriority”为“Medium”,则为“MEDIUM_PRIORITY”;如果“DeliveryPriority”为“High”,则为“HIGH_PRIORITY”
方向性 read_only_udm.network.direction 如果“directionality”为“Incoming”,则为“INBOUND”;如果“directionality”为“Originating”,则为“OUTBOUND”
E2ELatency read_only_udm.security_result.detection_fields.value 从“custom-data”或“message-info”中的“E2ELatency”字段获取的值
事件 read_only_udm.metadata.product_event_type 如果“event”为“+”,则为“Connect”;如果“event”为“-”,则为“Disconnect”;如果“event”为“*”,则为“Information”;如果“event”为“>”,则为“Send”;如果“event”为“<”,则为“Receive”
事件 read_only_udm.network.direction 如果“event”为“>”,则为“OUTBOUND”;如果“event”为“<”,则为“INBOUND”
EventID read_only_udm.security_result.detection_fields.value 从“EventID”字段中获取的值
EventReceivedTime read_only_udm.metadata.collected_timestamp 从“EventReceivedTime”字段中获取的值
EventReceivedTime read_only_udm.metadata.event_timestamp 从“column6”中的“EventReceivedTime”字段获取的值
FirstForestHop read_only_udm.security_result.detection_fields.value 从“custom-data”中的“FirstForestHop”字段获取的值
FromEntity read_only_udm.security_result.detection_fields.value 从“custom-data”或“message-info”中的“FromEntity”字段获取的值
guid read_only_udm.metadata.product_log_id 从“guid”字段中获取的值
主机名 read_only_udm.principal.asset.hostname 从“Hostname”字段中获取的值
主机名 read_only_udm.principal.hostname 从“Hostname”字段中获取的值
IncludeInSla read_only_udm.security_result.detection_fields.value 从“custom-data”或“message-info”中的“IncludeInSla”字段获取的值
internal-message-id read_only_udm.intermediary.resource.attribute.labels.value 从“internal-message-id”字段中获取的值
IsProbe read_only_udm.security_result.detection_fields.value 从“custom-data”中的“IsProbe”字段或“column21”字段中获取的值
关键字 read_only_udm.security_result.detection_fields.value 从“关键字”字段中获取的值
local-endpoint read_only_udm.principal.asset.ip 从“local-endpoint”字段中获取的值
local-endpoint read_only_udm.principal.ip 从“local-endpoint”字段中获取的值
local-endpoint read_only_udm.principal.port 从“local-endpoint”字段中获取的值
邮箱 read_only_udm.security_result.detection_fields.value 从“custom-data”或“message-info”中的“Mailboxes”字段获取的值
MailboxDatabaseGuid read_only_udm.security_result.detection_fields.value 从“custom-data”或“message-info”中的“MailboxDatabaseGuid”字段获取的值
邮件来自 read_only_udm.network.email.from 从“数据”中的“MAIL FROM”字段获取的值
邮件来自 read_only_udm.principal.user.email_addresses 从“数据”中的“MAIL FROM”字段获取的值
邮件来自 read_only_udm.network.email.from 从“数据”中的“邮件发件人”字段获取的值
邮件来自 read_only_udm.principal.user.email_addresses 从“data”中的“MAIL From”字段获取的值
message-id read_only_udm.network.email.mail_id 从“message-id”字段中获取的值
message-info read_only_udm.security_result.detection_fields.value 从“message-info”字段中获取的值
message-info read_only_udm.security_result.description 从“message-info”字段中获取的值
MessageValue read_only_udm.security_result.detection_fields.value 从“custom-data”中的“MessageValue”字段获取的值
message-subject read_only_udm.network.email.subject 从“message-subject”字段中获取的值
方法 read_only_udm.network.http.method 从“method”字段中获取的值
Microsoft_Exchange_Transport_MailRecipient_RequiredTlsAuthLevel read_only_udm.security_result.detection_fields.value 从“custom-data”中的“Microsoft_Exchange_Transport_MailRecipient_RequiredTlsAuthLevel”字段获取的值
MsgRecipCount read_only_udm.security_result.detection_fields.value 从“custom-data”或“message-info”中的“MsgRecipCount”字段获取的值
network-message-id read_only_udm.additional.fields.value.string_value 从“network-message-id”字段中获取的值
OriginalFromAddress read_only_udm.principal.user.email_addresses 从“custom-data”中的“OriginalFromAddress”字段或“column21”字段中获取的值
P2RecipStat read_only_udm.security_result.detection_fields.value 从“custom-data”或“message-info”中的“P2RecipStat”字段获取的值
PersistProbeTrace read_only_udm.security_result.detection_fields.value 从“custom-data”中的“PersistProbeTrace”字段或“column21”字段获取的值
PrioritizationReason read_only_udm.security_result.detection_fields.value 从“custom-data”中的“PrioritizationReason”字段获取的值
ProbeType read_only_udm.security_result.detection_fields.value 从“custom-data”中的“ProbeType”字段或“column21”字段获取的值
ProcessID read_only_udm.principal.process.pid 从“ProcessID”字段中获取的值
ProxiedClientHostname read_only_udm.intermediary.hostname 从“custom-data”中的“ProxiedClientHostname”字段获取的值
ProxiedClientIPAddress read_only_udm.intermediary.asset.ip 从“custom-data”中的“ProxiedClientIPAddress”字段获取的值
ProxiedClientIPAddress read_only_udm.intermediary.ip 从“custom-data”中的“ProxiedClientIPAddress”字段获取的值
ProxyHop1 read_only_udm.security_result.detection_fields.value 从“custom-data”中的“ProxyHop1”字段获取的值
RCPT TO read_only_udm.network.email.to 从“数据”中的“RCPT TO”字段获取的值
RCPT TO read_only_udm.target.user.email_addresses 从“数据”中的“RCPT TO”字段获取的值
RCPT To read_only_udm.network.email.to 从“数据”中的“RCPT To”字段获取的值
RCPT To read_only_udm.target.user.email_addresses 从“数据”中的“RCPT To”字段获取的值
recipient-address read_only_udm.target.user.email_addresses 从“recipient-address”字段中获取的值
recipient-count read_only_udm.target.resource.attribute.labels.value 从“recipient-count”字段中获取的值
recipient-status read_only_udm.target.resource.attribute.labels.value 从“recipient-status”字段中获取的值
remote-endpoint read_only_udm.target.asset.ip 从“remote-endpoint”字段中获取的值
remote-endpoint read_only_udm.target.ip 从“remote-endpoint”字段中获取的值
remote-endpoint read_only_udm.target.port 从“remote-endpoint”字段中获取的值
res_code read_only_udm.network.http.response_code 从“res_code”字段中获取的值
s-ip read_only_udm.principal.asset.ip 从“s-ip”字段中获取的值
s-ip read_only_udm.principal.ip 从“s-ip”字段中获取的值
s-port read_only_udm.principal.port 从“s-port”字段中获取的值
sc-status read_only_udm.network.http.response_code 从“sc-status”字段中获取的值
sc-substatus read_only_udm.additional.fields.value.string_value 从“sc-substatus”字段中获取的值
发件人地址 read_only_udm.network.email.from 从“sender-address”字段中获取的值
发件人地址 read_only_udm.principal.user.email_addresses 从“sender-address”字段中获取的值
sequence-number read_only_udm.additional.fields.value.number_value 从“sequence-number”字段中获取的值
server-hostname read_only_udm.target.asset.hostname 从“server-hostname”字段中获取的值
server-hostname read_only_udm.target.hostname 从“server-hostname”字段中获取的值
server-ip read_only_udm.target.asset.ip 从“server-ip”字段中获取的值
server-ip read_only_udm.target.ip 从“server-ip”字段中获取的值
session-id read_only_udm.network.session_id 从“session-id”字段中获取的值
sessionid read_only_udm.network.session_id 从“sessionid”字段中获取的值
严重程度 read_only_udm.security_result.severity 如果“严重程度”包含“信息”,则为“INFORMATIONAL”;如果“严重程度”包含“错误”,则为“ERROR”;如果“严重程度”包含“警告”,则为“MEDIUM”;否则为“UNKNOWN_SEVERITY”
SeverityValue read_only_udm.security_result.severity_details 从“SeverityValue”字段中获取的值
SlaExclusionReason read_only_udm.security_result.detection_fields.value 从“custom-data”中的“SlaExclusionReason”字段获取的值
来源 read_only_udm.additional.fields.value.string_value 从“source”字段中获取的值
SourceModuleName read_only_udm.principal.resource.name 从“SourceModuleName”字段中获取的值
SourceModuleType read_only_udm.principal.resource.type 从“SourceModuleType”字段中获取的值
SourceName read_only_udm.principal.resource.attribute.labels.value 从“SourceName”字段中获取的值
StoreObjectIds read_only_udm.security_result.detection_fields.value 从“custom-data”或“message-info”中的“StoreObjectIds”字段获取的值
任务 read_only_udm.security_result.detection_fields.value 从“任务”字段中获取的值
ThreadID read_only_udm.security_result.detection_fields.value 从“ThreadID”字段中获取的值
时间 read_only_udm.metadata.event_timestamp 从“date”和“time”字段中获取的值
ToEntity read_only_udm.security_result.detection_fields.value 从“custom-data”或“message-info”中的“ToEntity”字段获取的值
total-bytes read_only_udm.additional.fields.value.string_value 从“total-bytes”字段中获取的值
TransportTrafficSubType read_only_udm.security_result.detection_fields.value 从“custom-data”中的“TransportTrafficSubType”字段获取的值
TransportTrafficSubType read_only_udm.metadata.product_version 从“custom-data”中的“TransportTrafficSubType”字段获取的值
ts read_only_udm.metadata.event_timestamp 从“ts”字段中获取的值
u_agent read_only_udm.network.http.user_agent 从“u_agent”字段中获取的值
u_param read_only_udm.target.url 从“u_param”字段中获取的值
u_path read_only_udm.target.url 从“u_path”字段中获取的值
u_path read_only_udm.target.url 从“u_path”和“u_param”字段中获取的值
用户 read_only_udm.target.user.userid 从“用户”字段中获取的值
用户 read_only_udm.target.user.email_addresses 从“用户”字段中获取的值
metadata.event_type read_only_udm.metadata.event_type 如果“has_principal_email”为“true”且“has_target_email”为“true”,则为“EMAIL_TRANSACTION”;如果“event_type”为“GENERIC_EVENT”且“principal_hostname”“s_ip”“host”不为空或“has_principal”为“true”,则为“STATUS_UPDATE”;如果“event_type”为“GENERIC_EVENT”且“has_principal_email”为“true”或“has_target_email”为“true”,则为“USER_UNCATEGORIZED”;否则,取自“event_type”字段的值
metadata.log_type read_only_udm.metadata.log_type 硬编码的值“EXCHANGE_MAIL”
metadata.product_name read_only_udm.metadata.product_name 硬编码的值“Exchange Mail”
metadata.vendor_name read_only_udm.metadata.vendor_name 硬编码值“Microsoft”
network.application_protocol read_only_udm.network.application_protocol 如果“app_protocol”为“SMTP”“HTTP”或“HTTPS”,则取自“app_protocol”字段的值;如果“app_protocol”包含“SMTP”,则为“SMTP”
network.direction read_only_udm.network.direction 如果“s_ip”不为空,则为“INBOUND”
network.email.from read_only_udm.network.email.from 从“from_mail”字段中获取的值
network.email.mail_id read_only_udm.network.email.mail_id 从“msg_id”字段中获取的值
network.email.subject read_only_udm.network.email.subject 从“column19”字段中获取的值
network.email.to read_only_udm.network.email.to 从“to_mail”字段中获取的值
network.http.method read_only_udm.network.http.method 从“method”字段中获取的值
network.http.response_code read_only_udm.network.http.response_code 从“res_code”字段中获取的值
network.http.user_agent read_only_udm.network.http.user_agent 从“u_agent”字段中获取的值
network.sent_bytes read_only_udm.network.sent_bytes 从“sent_bytes”字段中获取的值
network.session_id read_only_udm.network.session_id 从“sessionid”字段中获取的值
principal.asset.hostname read_only_udm.principal.asset.hostname 从“principal_hostname”字段中获取的值
principal.asset.hostname read_only_udm.principal.asset.hostname 从“host”字段中获取的值
principal.asset.hostname read_only_udm.principal.asset.hostname 从“column3”字段中获取的值
principal.asset.ip read_only_udm.principal.asset.ip 从“column2”字段中获取的值
principal.asset.ip read_only_udm.principal.asset.ip 从“column25”字段中获取的值
principal.asset.ip read_only_udm.principal.asset.ip 从“s_ip”字段中获取的值
principal.hostname read_only_udm.principal.hostname 从“principal_hostname”字段中获取的值
principal.hostname read_only_udm.principal.hostname 从“host”字段中获取的值
principal.hostname read_only_udm.principal.hostname 从“column3”字段中获取的值
principal.ip read_only_udm.principal.ip 从“column2”字段中获取的值
principal.ip read_only_udm.principal.ip 从“column25”字段中获取的值
principal.ip read_only_udm.principal.ip 从“s_ip”字段中获取的值
principal.port read_only_udm.principal.port 从“s-port”字段中获取的值
principal.user.email_addresses read_only_udm.principal.user.email_addresses 从“mail”字段中获取的值
principal.user.email_addresses read_only_udm.principal.user.email_addresses 从“email_address”字段中获取的值
principal.user.userid read_only_udm.principal.user.userid 从“cs-username”字段中获取的值
security_result.about.labels.key read_only_udm.security_result.about.labels.key 硬编码的值“响应代码”
security_result.description read_only_udm.security_result.description 从“context”字段中获取的值
security_result.description read_only_udm.security_result.description 从“column22”字段中获取的值
security_result.priority read_only_udm.security_result.priority 如果“严重程度”为“1”“2”或“3”,则为“低”;如果“严重程度”为“4”“5”或“6”,则为“中”;如果“严重程度”为“7”“8”或“9”,则为“高”
security_result.severity read_only_udm.security_result.severity 如果“严重程度”包含“信息”,则为“INFORMATIONAL”;如果“严重程度”包含“错误”,则为“ERROR”;如果“严重程度”包含“警告”,则为“MEDIUM”;否则为“UNKNOWN_SEVERITY”
target.administrative_domain read_only_udm.target.administrative_domain 从“网域”字段中获取的值
target.asset.hostname read_only_udm.target.asset.hostname 从“column5”字段中获取的值
target.asset.hostname read_only_udm.target.asset.hostname 从“target_host”字段中获取的值
target.asset.ip read_only_udm.target.asset.ip 从“column4”字段中获取的值
target.asset.ip read_only_udm.target.asset.ip 从“column26”字段中获取的值
target.asset.ip read_only_udm.target.asset.ip 从“c-ip”字段中获取的值
target.hostname read_only_udm.target.hostname 从“column5”字段中获取的值
target.hostname read_only_udm.target.hostname 从“target_host”字段中获取的值
target.ip read_only_udm.target.ip 从“column4”字段中获取的值
target.ip read_only_udm.target.ip 从“column26”字段中获取的值
target.ip read_only_udm.target.ip 从“c-ip”字段中获取的值
target.port read_only_udm.target.port 从“c_port”字段获取的值
target.resource.attribute.labels.key read_only_udm.target.resource.attribute.labels.key 硬编码的值“收件人数量”
target.user.email_addresses read_only_udm.target.user.email_addresses 从“用户”字段中获取的值
target.user.user_display_name read_only_udm.target.user.user_display_name 从“username”字段中获取的值
target.user.userid read_only_udm.target.user.userid 从“用户”字段中获取的值
target.url read_only_udm.target.url 从“u_path”字段中获取的值

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。