阿里云日志系统介绍及应用
  aShMgzjHoH8N 2023年12月08日 9 0

前言

传统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架构

阿里云日志系统介绍及应用_nginx

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架构

阿里云日志系统介绍及应用_运维_02

应用日志

Kubernetes集群中以DaemonSet方式运行logtail-ds组件,应用只需要将Log输出模式调整为Console标准输出即可,logtail-ds组件自动采集数据并上报。

代码配置

log4j.rootLogger=INFO, console
... ...

实现原理

Logtail与Docker的Domain Socket进行通信,查询该Docker上运行的所有容器,并根据容器中的Label和环境变量定位需要被采集的容器。Logtail通过docker logs命令获取指定容器日志。Logtail在采集容器的标准输出时,会定期将采集的点位信息保存到checkpoint文件中。如果Logtail停止后再次启动,会从上一次保存的点位开始采集。

阿里云日志系统介绍及应用_运维_03

通过SLS Logstore控制台查询分析

阿里云日志系统介绍及应用_nginx_04

系统组件日志

和应用日志一样,在集群中以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

实现原理

阿里云日志系统介绍及应用_nginx_05

CRD的内部工作流程如下:

  1. 使用kubectl或其他工具应用AliyunLogConfig CRD。
  2. alibaba-log-controller监听到CRD配置更新。
  3. alibaba-log-controller根据CRD配置中的内容以及日志服务中Logtail配置的状态,自动向日志服务提交创建Logstore、创建Logtail配置以及应用机器组的请求。
  4. Logtail定期请求Logtail配置所在服务器,获取新的或已更新的Logtail配置并进行热加载。
  5. Logtail根据Logtail配置采集各个容器上的标准输出或文本日志。
  6. Logtail将采集到的容器日志发送给日志服务。

通过SLS Logstore控制台查询分析

阿里云日志系统介绍及应用_运维_06

告警

告警系统整体架构

阿里云日志系统介绍及应用_nginx_07

告警组

  1. 用户组;
  2. 值班组;
  3. 应急组。

关联表

在海外业务日志告警场景中,通过对接APPCenter、CAS、Kubernetes将站点和Owner等信息进行汇总并创建一个虚拟表最终上传至OSS,用户配置告警时增加固定关联SQL,将告警信息和人员关联并实现最终通知。

在查询SQL中进行关联

_namespace_:default and _container_name_: nginx-v1 |
select 
  endpoint,
  todayCnt,
  app_meta.dev_owner as dev_owner,
  app_meta.service_group as service_group,
  app_meta.service_group_name as service_group_name
from (
  select count(*) as todayCnt, _container_name_ as endpoint
  from log
  group by endpoint 
) a 
left join app_meta on a.endpoint = app_meta.service

阿里云日志系统介绍及应用_数据_08

 通知管理

通知(行动)管理系统负责管理告警的通知渠道和对象,由行动策略、内容模板、日历、用户、用户组、值班组和渠道额度等组成。通知(行动)管理系统通过行动策略将告警动态分派给特定的通知渠道,再通知给目标用户、用户组或值班组。

根据日历设置值班人员

阿里云日志系统介绍及应用_运维_09

告警示例

阿里云日志系统介绍及应用_数据_10

告警事务处理

企微告警内容中提供免登录处理方式,也可以通过控制台手动确认。

阿里云日志系统介绍及应用_运维_11

总结

SLS能有效降低运维维护和管理成本,运维人员无需额外关心日志系统的性能指标。Kubernetes Event持久化、RDS慢日志、阿里云成本分析等也都集成至SLS,对云产品也是一键式接入,极大的提高了运维工作效率。费用方面,SLS推出全新计费模式“按写入数据量计费”,目前海外业务SLS正在转换中,按照预估推测,转换后的SLS成本将降低30%左右。

作者介绍

·   矿泉,系统运维资深专家

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月08日 0

暂无评论

推荐阅读
  jnZtF7Co41Wg   2023年12月11日   11   0   0 nginx客户端服务端
  jnZtF7Co41Wg   2023年12月09日   15   0   0 客户端服务端数据
  jnZtF7Co41Wg   2023年12月10日   14   0   0 nginx客户端服务端NFS
aShMgzjHoH8N