前言
传统IDC的建设,需要投入大量的人力、物力和财力,而公有云几乎拥有一站式的建设、部署方案和完整的云生态,并且可以根据业务随时随地的弹性扩展,特别是一些中小型的公司,越来越多的选择将业务落地到公有云。而对于所有公司、所有业务来讲,日志是一个无法绕开的话题,如何建设一个稳健和高效的日志系统,是所有公司架构、运维人员都需要思考的一个问题。本文我们将介绍阿里云日志系统(以下简称SLS)以及信也科技海外业务场景实践。
SLS是什么
SLS是云原生观测与分析平台,为Log、Metric、Trace等数据提供大规模、低成本、实时的平台化服务。日志服务一站式提供数据采集、加工、查询与分析、可视化、告警、消费与投递等功能,全面提升开发、运维、运营、安全等场景的数字化能力。
功能概览
功能描述 | |
数据采集 | 支持Log、Metric、Trace等数据类型,并支持50多种数据源,包括阿里云产品、服务器与应用、物联网设备、移动端、开源软件、标准协议等 |
日志存储 | 支持智能分层存储。数据分层存储时,可降低长周期存储的成本,同时保证日志的查询、分析、可视化、告警、投递和加工等能力不受影响 |
数据加工 | 提供200多个内置函数、400多个正则表达式、灵活的自定义函数,实现过滤、分裂、转换、富化、复制等效果,满足数据分派、规整、融合等场景 |
查询与分析 | 支持PB级数据实时查询与分析,提供10多种查询运算符、10多种机器学习函数、100多个SQL函数,并支持定时SQL和SQL独享版 |
可视化 | 支持查询与分析结果可视化,提供10多种统计图表,包括表格、线图、柱状图、地图等,并支持基于统计图表自定义仪表盘(支持外嵌与下钻分析) |
告警 | 提供一站式告警功能,包括告警监控、告警管理、通知(行动)管理等,适用于开发运维、IT运维、智能运维、安全运维、商务运维等多个场景 |
消费与投递 | 支持数据实时消费,适用于Storm消费、Flume消费、Flink消费等场景;支持数据实时投递,适用于将数据投递至OSS、TSDB等云产品 |
日志审计 | 在继承现有日志服务所有功能基础上,还支持多账户下实时自动化、中心化采集云产品日志并进行审计,以及支持审计所需的存储、查询及信息汇总 |
SLS架构
SLS vs ELK
SLS | ELK | |
性能 | 查询分析性能是ELK的十倍 | 相同成本介质部署,SLS提供更低的延迟以及更稳定的查询分析性能,ELK超过10TB就会遇到性能瓶颈 |
成本 | 全托管、免运维,百TB规模下,SLS综合成本是ELK的44% | 这里的成本不光是部署成本,还需要包括使用成本。要维护良好状态的ELK集群,需要从容量规划、稳定性保障、性能调优、数据高可用,数据如何在不同系统间关联等多个方面下功夫 |
易用性 | 一站式数据监控分析平台,开源协议及组件有更好的兼容性 | 利用ELK构建完整可观测分析平台需组合多款服务,这其中包括Logstash、 Kibana、Kafka、Flink、TSDB、Prometheus等 |
互联互通与二次开发 | 可观测数据统一存储平台、数据开放流通,API友好支持二次开发 | 在可观测场景中,ELK需要跨多个数据源进行关联分析,形成数据孤岛 |
告警能力 | 提供全面监控、智能降噪和多维分析的能力 | 仅支持同一结构多索引合并分析有限的告警能力 |
附加功能 | 针对数据分析场景支持30+聚合计算函数,丰富的机器学习函数以及多渠道数据源,是ELK提供操作符的5倍,充分发掘数据分析能力 | 仅支持指标分析聚合、分桶聚合、管道分析、矩阵分析有限的聚合算法 |
业务实践
海外业务SLS架构
应用日志
Kubernetes集群中以DaemonSet方式运行logtail-ds组件,应用只需要将Log输出模式调整为Console标准输出即可,logtail-ds组件自动采集数据并上报。
代码配置
log4j.rootLogger=INFO, console
... ...
实现原理
Logtail与Docker的Domain Socket进行通信,查询该Docker上运行的所有容器,并根据容器中的Label和环境变量定位需要被采集的容器。Logtail通过docker logs命令获取指定容器日志。Logtail在采集容器的标准输出时,会定期将采集的点位信息保存到checkpoint文件中。如果Logtail停止后再次启动,会从上一次保存的点位开始采集。
通过SLS Logstore控制台查询分析
系统组件日志
和应用日志一样,在集群中以DaemonSet方式运行logtail-ds组件,可通过CRD方式创建Logtail配置采集容器日志。目前使用这种方式的组件有Nginx-ingress和CoreDNS。
CRD配置(Nginx-ingress为例)
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
generation: 3
name: k8s-nginx-ingress
namespace: default
spec:
extenions: ""
lifeCycle: null
logstore: nginx-ingress
logtailConfig:
configName: k8s-nginx-ingress
inputDetail:
plugin:
inputs:
- detail:
IncludeLabel:
io.kubernetes.container.name: nginx-ingress-controller
Stderr: false
Stdout: true
type: service_docker_stdout
processors:
- detail:
KeepSource: false
Keys:
- client_ip
- x_forward_for
- remote_user
- time
- method
- url
- version
- status
... ...
- request_length
- request_time
- proxy_upstream_name
- upstream_addr
- upstream_response_length
- upstream_response_time
- upstream_status
- req_id
- host
NoKeyError: true
NoMatchError: true
Regex: ^(\S+)\s-\s\[([^]]+)]\s-\s(\S+)\s\[(\S+)\s\S+\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s"([^"]*)"\s(\S+)\s(\S+)+\s\[([^]]*)]\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s*(\S*).*
SourceKey: content
type: processor_regex
inputType: plugin
machineGroups: null
productCode: k8s-nginx-ingress
productLanguage: ""
project: ""
shardCount: null
status:
status: OK
statusCode: 200
实现原理
CRD的内部工作流程如下:
- 使用kubectl或其他工具应用AliyunLogConfig CRD。
- alibaba-log-controller监听到CRD配置更新。
- alibaba-log-controller根据CRD配置中的内容以及日志服务中Logtail配置的状态,自动向日志服务提交创建Logstore、创建Logtail配置以及应用机器组的请求。
- Logtail定期请求Logtail配置所在服务器,获取新的或已更新的Logtail配置并进行热加载。
- Logtail根据Logtail配置采集各个容器上的标准输出或文本日志。
- Logtail将采集到的容器日志发送给日志服务。
通过SLS Logstore控制台查询分析
告警
告警系统整体架构
告警组
- 用户组;
- 值班组;
- 应急组。
关联表
在海外业务日志告警场景中,通过对接APPCenter、CAS、Kubernetes将站点和Owner等信息进行汇总并创建一个虚拟表最终上传至OSS,用户配置告警时增加固定关联SQL,将告警信息和人员关联并实现最终通知。
在查询SQL中进行关联
通知管理
通知(行动)管理系统负责管理告警的通知渠道和对象,由行动策略、内容模板、日历、用户、用户组、值班组和渠道额度等组成。通知(行动)管理系统通过行动策略将告警动态分派给特定的通知渠道,再通知给目标用户、用户组或值班组。
根据日历设置值班人员
告警示例
告警事务处理
企微告警内容中提供免登录处理方式,也可以通过控制台手动确认。
总结
SLS能有效降低运维维护和管理成本,运维人员无需额外关心日志系统的性能指标。Kubernetes Event持久化、RDS慢日志、阿里云成本分析等也都集成至SLS,对云产品也是一键式接入,极大的提高了运维工作效率。费用方面,SLS推出全新计费模式“按写入数据量计费”,目前海外业务SLS正在转换中,按照预估推测,转换后的SLS成本将降低30%左右。
作者介绍
- 矿泉,系统运维资深专家