CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页实践文章破解新能源汽车数据清洗难题,实现高效数据驱动运维

破解新能源汽车数据清洗难题,实现高效数据驱动运维

#可观测性#Kubernetes#容器#监控#日志#etl

agenticOps | 2026-05-23

在新能源汽车行业,贯穿车端、手机端与云端的运维体系每天都会产生海量的日志数据。这些日志覆盖面广、格式多样,绝大多数属于弱结构化甚至非结构化数据,其字段不统一、结构多变,给后续的数据处理与分析带来了极大的挑战。如何高效地将这些繁杂、异构的日志数据进行标准化清洗和结构化转换,是实现运维自动化管理、智能告警和业务洞察的关键基础。

依托日志服务(SLS)的一站式数据清洗能力,将纷繁复杂的原始日志高效转化为统一、可分析的数据格式。通过SQL实现数据汇总分析,并灵活配置监控告警,全面提升运维数据的可观测性和响应能力,实现对新能源汽车系统运行状态的深度洞察与智能化管理。

新能源汽车日志数据分析五大挑战

混杂日志清洗困境

为保障全链路可观测性,通常需要将车端、手机端以及后端云服务等日志统一接入同一个日志平台(如Logstore)。日志采集方式五花八门,比如SDK、Logtail、OSS Bucket、开源Agent等,采集到的日志格式千差万别(如syslog、k8s日志、KV、JSON等),导致日志字段结构不统一,甚至在同一Logstore中混杂存储,给日志解析、字段标准化和查询分析带来极大难度。此外,还需要对数据中的敏感字段(如VIN码、位置、手机号、证件号)在采集阶段进行脱敏,保障用户隐私安全。

数据汇聚挑战

新能源汽车的业务和运维常常分散在不同地区、不同云平台,各地域的数据需要高效、安全地汇聚到特定的中心进行分析。这种跨地域、跨云环境下的数据同步与整合,极易产生网络延迟、传输安全和一致性等问题。

秒级响应压力

运维场景尤其是在紧急客户投诉或者安全事件发生时,对日志查询和分析速度提出了极高要求。必须保障日志能够实时采集、即时查询,在秒级时间内帮助一线运维人员定位和解决问题。

成本控制难题

大规模的数据流转和多环节临时存储会显著提高存储成本。因此,企业希望在日志流转、加工等各环节中减少不必要的中间存储,占用更少的临时Logstore空间,从而降低总体运营费用。

运维流程透明化难题

复杂的数据流转与加工过程通常涉及众多 Logstore、加工任务、定时 SQL 任务以及导入任务,彼此之间关联错综复杂。这种情况下,数据在各 Logstore 之间的流向往往难以清晰梳理,不仅显著增加了整体运维的难度,也大大降低了任务的可管控性。

SLS数据清洗解决方案

针对新能源汽车系统运维中面临的日志复杂性挑战,SLS针对上述数据五大挑战提供如下解决方案:包括SLS全链路日志接入加工能力、跨地域数据加工能力、高性能数据清洗、数据流转与存储成本优化、SLS Logstore血缘关系可视化。

混杂日志清洗困境 —— SLS全链路日志接入加工能力

  • 多源统一接入: SLS支持通过SDK、Logtail、OSS Bucket以及各类开放协议如Kafka、Syslog等多种写入方式,支持将来自车端、手机端、云端的不同日志,写入SLS Logstore,实现一站式日志查询,确保全链路覆盖。
  • 复杂格式智能提取: 针对JSON、KV、syslog、k8s日志等多种弱结构化日志,SLS内置强大的字段提取能力,支持自定义正则表达式、条件语句(let语法)驱动的日志格式识别与处理,即使没有明确字段区分,也可实现分流解析。

syslog协议日志解析

K8容器日志:KV、JSON混合解析

  • 隐私合规脱敏: SLS支持基于正则表达式的动态字段脱敏机制,在采集或入库环节即可精准去除VIN、位置轨迹、手机号等敏感信息,满足数据安全与隐私合规要求。

数据汇聚挑战 —— SLS跨地域数据加工能力

  • SLS支持跨地域的数据加工,可以将不同地域、不同云环境中的业务数据,按照指定规则和权限,安全、高效地汇聚至同一Logstore进行分析,消除地域孤岛,支持集中化管理和分析。

秒级响应压力 —— SLS高性能数据清洗

SLS具备强大的实时处理与查询能力,数据加工支持秒级延迟,单作业2Mil/s(百万条每秒)的处理速度(相当于2GB/s),并且处理速度支持按照shard数量进行线性提高,支持在紧急事件、客户投诉、业务峰值场景下,快速定位问题,显著提升运维效率与客户响应速度。

成本控制难题 —— SLS数据流转与存储优化

  • SLS写入处理器与数据加工具备同等的数据处理能力,可以在日志写入过程中直接进行数据清洗、脱敏、降噪。借助写入处理器实现成本优化: 利用SLS的“零临时存储”写入处理器,在数据写入阶段实现数据加工和字段标准化,无需临时Logstore中转,从而降低存储成本和系统复杂度。在不需要保存原始日志的情况下,可以节省临时Logstore的存储开销。

运维流程透明化难题 —— SLS Logstore血缘可视化

阿里云可观测MCP服务提供了Project、Logstore、任务级别的工具,通过MCP工具,可以列举用户下project列表,列举project对应的任务列表(包括数据导入、数据加工、数据投递、定时SQL等),通过LLM对任务配置的解析,分析出其中源Logstore及目标Logstore,进一步可以通过对话让Agent画出Mermaid等的绘图工具的文本,将绘图文本贴到工具中,即可展示Logstore间的数据流转。

注意:SLS任务列表工具正在内测中,如需使用可以联系SLS技术支持。

graph TD
%% Source: OSS -> Target: Logstore
A[oss: gyhangzhou] --> B[hcltestcd101.test1]
C[oss: gyhangzhou] --> D[hcltestcd101.test2]

%% Logstore -> ETL
B -->|test1| E[etl: etl-1748412289-337270]
D -->|test2| F[etl: etl-1748412289-337270]

%% ETL -> Targets
E --> G[hcltestcd103.test1]
E --> H[hcltestcd1102.test1]
E --> I[hcltestcd103.test2]
E --> J[hcltestcd1102.test2]

F --> K[hcltestcd103.test1]
F --> L[hcltestcd101.test1]

借助工具网站展示效果:

接下来以新能源车充电为例,来介绍通过各种异构源数据接入、并使用写入处理器来对数据进行清洗、最终完成充电场景的分析。

新能源车充电场景的日志清洗分析实战

用户驾驶车辆到达充电站后,系统自动记录定位轨迹。用户停车下车后,插入充电枪,此时车辆或充电桩检测插枪事件并自动发起云端认证。用户通过扫码、车机屏或App启动充电,操作信息在充电桩、车辆与云端交互并产生日志,后台同时处理认证和计费等逻辑。充电过程中,车端与充电桩持续上报充电状态与告警,App或云端同步显示充电进度和费用。充电结束后,相关设备上报“充电结束”日志。

写入处理器方案介绍

在整个新能源车交互的过程中,涉及充电桩、车、手机、后台服务等多个终端及服务,其中充电桩的日志上传可以通过SDK、MQTT、Logtail、定期上传OSS等方式上传日志到SLS Logstore,手机端使用SDK直传日志到SLS Logstore,车端通过定期上传文件到OSS,再通过SLS 实时导入OSS文件的方式上传日志,车机后端服务部署在K8s集群中,直接通过SLS的Logtail-ds采集日志到SLS Logstore。

通过将多个终端的日志采集到同一个Logstore,来实现全局的充电分析和故障排查,由于不同的终端日志格式差别较大,需要对数据进行清洗规整,这里通过SLS写入处理器的方式,使用SPL语法对弱结构化数据进行结构化处理,便于后续数据监控运维分析告警。

写入处理器日志清洗

1. 车端进出站轨迹日志(JSON格式)

{
"ts": "2024-06-17T11:26:00Z",
"vin": "LVSHF6196L1234567",
"event": "arrive_station",
"station_id": "SH_CHG_001",
"location": {
"lat": 31.2362,
"lon": 121.4798
}
}

写入处理器语句:

* | parse-json content 
| parse-json location 
| project-away content,location
| extend __tidme__ = cast(to_unixtime(date_parse(ts, '%Y-%m-%dT%H:%i:%sZ')) as bigint)

处理结果:

__time__: 1718623560
ts: 2024-06-17T11:26:00Z
vin: LVSHF6196L1234567
event: arrive_station
station_id: SH_CHG_001
lat: 31.2362
lon: 121.4798

2. 充电枪插入(车端/桩端事件)

充电桩侧API日志:

2024-06-17T11:27:11Z station=SH_CHG_001 event=plug_in vin=LVSHF6196L1234567 result=success connector=DC

写入处理器语句:

* | parse-regexp content, '(\d+-\d+-\d+T\d{2}:\d{2}:\d{2}Z) (.*)' as time, content
| parse-kv content, ' ', '=' 
| project-away content
| extend __time__ = cast(to_unixtime(date_parse(time, '%Y-%m-%dT%H:%i:%sZ')) as bigint)

处理结果:

__time__: 1718623631
connector: DC
event: plug_in
result: success
station: SH_CHG_001
time: 2024-06-17T11:27:11Z
vin: LVSHF6196L1234567

3. 启动充电(手机端扫码/车机屏操作)

手机App日志(KV格式):

2024-06-17 11:27:12 user_id=87234 action=charge_start vin=LVSHF6196L1234567 station_id=SH_CHG_001 os=android13

写入处理器语句:

* | parse-regexp content, '(\d+-\d+-\d+ \d{2}:\d{2}:\d{2}) (.*)' as time, content
| parse-kv content, ' ', '=' 
| project-away content
| extend __time__ = cast(to_unixtime(date_parse(time, '%Y-%m-%d %H:%i:%s')) as bigint)

处理结果:

__time__: 1718623632
action: charge_start
os: android13
station_id: SH_CHG_001
time: 2024-06-17 11:27:12
user_id: 87234
vin: LVSHF6196L1234567

云端认证/计费服务日志(嵌入JSON):

2024-06-17T11:27:13Z pod=charge-gw ns=prod log={"user_id":"87234","vin":"LVSHF6196L1234567","api":"/api/charge/start","station_id":"SH_CHG_001","result":"started","ts":"2024-06-17T11:27:13Z"}

写入处理器语句:

* | parse-regexp content, '(\d+-\d+-\d+T\d{2}:\d{2}:\d{2}Z) (.*)' as time, content
| parse-kv content, ' ', '=' 
| project-away content
| parse-json log
| project-away log
| extend __time__ = cast(to_unixtime(date_parse(time, '%Y-%m-%dT%H:%i:%sZ')) as bigint)

结果:

__time__: 1718623633
api: /api/charge/start
ns: prod
pod: charge-gw
result: started
station_id: SH_CHG_001
ts: 2024-06-17T11:27:13Z
user_id: 87234
vin: LVSHF6196L1234567

车端充电启动日志:

{
"ts": "2024-06-17T11:27:14Z",
"vin": "LVSHF6196L1234567",
"event": "charging_start",
"station_id": "SH_CHG_001",
"battery": {
"voltage": 381.0,
"current": 25.1,
"soc": 45
}
}

写入处理器语句:

* | parse-json content
| project-away content
| parse-json battery
| project-away battery
| extend __time__ = cast(to_unixtime(date_parse(ts, '%Y-%m-%dT%H:%i:%sZ')) as bigint)

结果:

__time__: 1718623634
current: 25.100000
event: charging_start
soc: 45
station_id: SH_CHG_001
ts: 2024-06-17T11:27:14Z
vin: LVSHF6196L1234567
voltage: 381.000000

4. 充电进行中(车端定期上报,充电过程数据)

{
"ts": "2024-06-17T11:47:14Z",
"vin": "LVSHF6196L1234567",
"event": "charging_status",
"station_id": "SH_CHG_001",
"battery": {
"voltage": 410.6,
"current": 3.2,
"soc": 88
}
}

写入处理器语句:

* | parse-json content
| project-away content
| parse-json battery
| project-away battery
| extend __time__ = cast(to_unixtime(date_parse(ts, '%Y-%m-%dT%H:%i:%sZ')) as bigint)

结果:

__time__: 1718624834
current: 3.200000
event: charging_status
soc: 88
station_id: SH_CHG_001
ts: 2024-06-17T11:47:14Z
vin: LVSHF6196L1234567
voltage: 410.600000

5. 充电结束

(自动结束/手动停止)

{
"ts": "2024-06-17T12:05:56Z",
"vin": "LVSHF6196L1234567",
"event": "charging_stop",
"station_id": "SH_CHG_001",
"battery": {
"voltage": 415.0,
"current": 0.0,
"soc": 92
},
"result": "success"
}

写入处理器语句:

* | parse-json content
| project-away content
| parse-json battery
| project-away battery
| extend __time__ = cast(to_unixtime(date_parse(ts, '%Y-%m-%dT%H:%i:%sZ')) as bigint)

结果:

__time__: 1718625956
current: 0.000000
event: charging_stop
result: success
soc: 92
station_id: SH_CHG_001
ts: 2024-06-17T12:05:56Z
vin: LVSHF6196L1234567
voltage: 415.000000

桩端日志:

2024-06-17T12:05:57Z station=SH_CHG_001 event=charge_end vin=LVSHF6196L1234567 
result=success duration=2256s total_kwh=28.7

写入处理器语句:

* | parse-regexp content, '(\d+-\d+-\d+T\d{2}:\d{2}:\d{2}Z) (.*)' as time, content
| parse-kv content, ' ', '=' 
| project-away content
| extend __timde__ = cast(to_unixtime(date_parse(time, '%Y-%m-%dT%H:%i:%sZ')) as bigint)

结果:

__time__: 1718625957
duration: 2256s
event: charge_end
result: success
station: SH_CHG_001
time: 2024-06-17T12:05:57Z
total_kwh: 28.7
vin: LVSHF6196L1234567

云端计费结算日志(JSON格式):

{
"ts": "2024-06-17T12:06:01Z",
"vin": "LVSHF6196L1234567",
"user_id": "87234",
"station_id": "SH_CHG_001",
"event": "charge_bill",
"total_kwh": 28.7,
"total_fee": 88.23,
"pay_method": "wechat"
}

写入处理器语句:

* | parse-json content
| project-away content
| extend __time__ = cast(to_unixtime(date_parse(ts, '%Y-%m-%dT%H:%i:%sZ')) as bigint)

结果:

__time__: 1718625961
event: charge_bill
pay_method: wechat
station_id: SH_CHG_001
total_fee: 88.230000
total_kwh: 28.700000
ts: 2024-06-17T12:06:01Z
user_id: 87234
vin: LVSHF6196L1234567

运维分析

在得到清洗后的规整数据后,可以对数据进行运维分析,针对充电场景可以使用SQL进行运维分析:

  • 充电桩一天总充电次数/总电量/分时段充电峰值
  • 充电失败的主因(插枪异常/认证异常/设备故障)
  • 一站式追溯充电行为全链路(到达、插枪、认证、启动、完成、支付)
  • SOC提升曲线及充电速度监控
  • 异常持续低速充电或频繁断充自动报警

注意:下方图表数据为模拟数据,用来说明SQL分析结果

1. 充电桩一天总充电次数/总电量/分时段充电峰值

每日总充电次数和总电量:

* | SELECT
station_id,
date_trunc('day', __time__) AS day,
COUNT(*) AS charge_count,
SUM(total_kwh) AS total_kwh
FROM
log
WHERE
event = 'charging_stop'
GROUP BY
station_id, day
ORDER BY
charge_count DESC

分时段充电次数(如每小时峰值统计):

* | SELECT
date_trunc('hour', __time__) as hour,
station_id,
COUNT(*) AS charge_count
FROM
log
WHERE
event = 'charging_start'
GROUP BY
hour, station_id
ORDER BY
hour,station_id 
limit all

2. 充电失败的主因(插枪异常/认证异常/设备故障)

统计各异常类型发生次数:

* | SELECT
reason, -- 假设清洗后有失败原因归类字段reason
COUNT(*) AS fail_count
FROM
log
WHERE
event IN ('charging_start', 'plug_in', 'charging_auth')
AND result = 'fail'
GROUP BY
reason
ORDER BY
fail_count DESC

3. 一站式追溯充电行为全链路(到达、插枪、认证、启动、完成、支付)

使用查询方式,按VIN和时间顺序追溯某用户/车辆全流程日志:

vin: LVSHF6196L5181426

4. SOC提升曲线及充电速度监控

提取某次充电过程SOC随时间变化

vin:LVSHF6196L0034 and station_id: SH_CHG_008 | SELECT
date_trunc('minute', __time__) as dt,
battery_soc
FROM
log
ORDER BY
dt

统计平均充电速度(SOC提升率):

event: charging_status
| SELECT date_trunc('hour', __time__) as dt,
vin,
station_id,
(MAX(battery_soc) - MIN(battery_soc)) AS avg_soc_per_hour
FROM
log
GROUP BY
dt,vin, station_id

5. 异常持续低速充电或频繁断充自动报警

检测充电过程平均速度异常低(如SOC提升过慢):

event: charging_status
| SELECT date_trunc('hour', __time__) as dt,
vin,
station_id,
(MAX(battery_soc) - MIN(battery_soc)) AS avg_soc_per_hour
FROM
log
GROUP BY
dt,vin, station_id
HAVING avg_soc_per_hour < 0.2 -- 低于阈值触发告警

检测短时间内多次充电启动与终止(频繁断充):

查询分析右上角时间范围选择相对1小时

* | SELECT
vin,
station_id,
COUNT(*) AS interrupt_count
FROM
log
WHERE
event IN ('charging_start', 'charging_stop')

GROUP BY
vin, station_id
HAVING interrupt_count > 3 -- 阈值可按需设置

总结

新能源汽车行业日志数据因来源多样、格式混杂且需实时处理,面临清洗困难、跨地域汇聚、成本控制及运维透明化等挑战。SLS通过全链路接入多源日志、智能解析格式、动态脱敏;跨地域数据加工;百万级实时处理能力;写入处理器实现零临时存储降本;血缘可视化工具清晰呈现数据流转,来解决上述问题。最后以充电场景为例,充电桩、车机、手机等日志经SLS统一清洗后,支持故障排查与分析。

相关参考

  • SPL语法
  • 写入处理器
  • 写入处理器与Logtail处理配置、数据加工的对比
  • 阿里云可观测MCP服务

文章大纲

推荐文章

超过 2000+ 位开发者正在阅读

给 OpenClaw 加上企业级 Memory

给 OpenClaw 加上企业级 Memory

4646 阅读

阿里云 STAROps 全域智能运维平台发布!

阿里云 STAROps 全域智能运维平台发布!

3453 阅读

阿里云正式发布 RCA Benchmark

阿里云正式发布 RCA Benchmark

2716 阅读

推荐视频

UModel 最佳实践 Vol.1 UModel 数据建模全景解读

UModel 最佳实践 Vol.1 UModel 数据建模全景解读

3854 观看50:35
云监控2.0全景:可观测范式升级与智能运维蓝图

云监控2.0全景:可观测范式升级与智能运维蓝图

2532 观看41:06

推荐工具

精选可观测领域开发者工具

云监

云监控 2.0 沙箱体验

7483 使用

免费

免费网络拨测工具

2746 使用