日志分类

1.1 日志来源分类

诊断日志:APP、Web、服务端 、Nginx 日志错误排查
统计日志:运营数据埋点统计、IP访问量
审计日志:对日志规范化、过滤、归并和告警分析等处理后,以统一格式的日志形式进行集中存储和管理

1.2 日志统计维度

  • Logging: 提供系统/进程最精细化的信息,例如某个关键变量、事件、访问记录等。
  • Tracing: 提供了一个请求从接收到处理完毕整个生命周期的跟踪路径,通常请求都是在分布式的系统中处理,所以也叫做分布式链路追踪。
  • Metrics: 提供量化的系统内/外部各个维度的指标,一般包括Counter、Gauge、Histogram等。

image.png

产品功能对比

产品名称 Graylog 阿里云SLS Splunk Elk
技术架构 Graylog Server
es(日志数据)
mongodb(Streams, alerts, users, settings)
Rest api(日志采集、查询)
Loghub
TSDB
time-series indexer(时序索引) Logstash
es
kibana(grafana)
日志结构 按时间日期切割的Es索引 succinct tree (只有 FST 结构的 40~70%) LSM(日志结构合并树(Log-Structured Merge-Tree)) FST tree(Finite State Transducer)
功能 查询、报表、报警 查询、实时分析、报警,投递消费 查询、实时分析、报警 查询,报表
优点 部署方便
可视化规则配置
权限控制

| 功能全面(采集、日志类型、统计)
运维成本低
扩展性好、
高性能、高可用
上下文、tail查询
云平台支持 | 动态分析(抽取新的字段)
权限控制
储存体积小(数据压缩)
SPL(非结构化语句)
上下文查询 | 灵活扩展 | | 缺点 | 使用体验不友好~ | | 付费 | 自定义logstash规则(性能)、日志分割
配置复杂
不支持多行采集 |

日志平台使用

3.1 Graylog 平台使用

3.1.1 查询语法

  • 模糊查询:直接输入字符串 JOBTICKET_TIMEOUT_CHECK 或者JOB_TICKET_TIMEOUT(、?号不可以在首位). * 有区别.
  • 精确查询:加引号 “JOB_TICKET_TIMEOUT_CHECK”
  • 字段查询:message:JOB*
  • 多字段查询:message:(JOB_SEND_USER_WEEK_SUMMARY JOB_CREATE_TICKET_USER_TREND)
  • 多条件查询:JOB_SEND_USER_WEEK_SUMMARY OR (JOB_CREATE_TICKET_USER_TREND AND source:”BJ-VM-28-49-37”)
  • 正则匹配查询:/.*_USER_WEEK_SUMMARY/
  • 关键字: AND、OR、NOT (需要大写)、 exists
  • 范围查找http_response_code:[0 TO 64}http_response_code:>400createdAt:[“2020-07-29T12:00:00.000-05:00” TO “2020-07-30T15:13:00.000-05:00”]
  • 字符串转译:& | : \ / + - ! ( ) { } [ ] ^ “ ~ * ? . 示例: path:\/posts\/1234

    3.1.2 stream 配置

    功能:主要用来过滤结果、聚合相同系统、类型数据
    一个 Stream 唯一属于一个 Index Set,但是多个 Streams 可以共享同一个 Index Set,同名字段类型必须一致

    3.1.3 告警配置

    告警支持 http 和 email 方式 (FATAL级别错误);

    3.2 阿里云 sls 使用

    3.2.1 查询语法

  • 全文查询: PUT and cn-shanghai

  • 字段查询: request_time>60 and request_method:Ge*
  • 精确查询: 使用完整的词进行查询
  • 模糊查询: 星号(*)或问号(?)不能用在词的开头
  • 运算符:and or not in () : >= , 关键字需要 “” 包裹;
  • LivaTail & 上下文查询

    3.2.2 分析语法:

    查询语句和分析语句以竖线(|)分割:
    示例: | SELECT status, count() AS PV GROUP BY status

  • SQL函数: 、AVG、. method: PostLogstoreLogs | SELECT avg(latency) AS avg_latency, Project GROUP BY Project HAVING avg_latency > 1000

  • SQL语法:INSERT、GROUP、HAVEING、LIMIT、JOIN 子查询. *| insert into target_logstore(k1,k2,v) select k1,k2,count(1) from source_logstore group by k1,k2
  • 机器学习函数: 省略

    3.2.3 Trace 链路服务

    基于 OpenTelemetry只提供数据的格式定义、产生、收集、发送,但并不提供分析、可视化、告警等功能。

    3.2.4 数据加工

  • 数据规整:针对混乱格式的日志进行字段提取、格式转换,获取结构化数据以支持后续的流处理、数据仓库计算。

  • 数据富化:对日志(例如订单日志)和维表(例如用户信息表)进行字段连接(JOIN),为日志添加更多维度的信息,用于数据分析。
  • 数据流转:通过跨地域加速功能将海外地域的日志传输到中心地域,实现全球日志集中化管理。
  • 数据脱敏:对数据中包含的密码、手机号、地址等敏感信息进行脱敏。
  • 数据过滤:过滤出关键服务的日志,用于重点分析。

    日志平台架构参考

    4.1 GrayLog

    image.png

    4.2 阿里云SLS

    image.png
    image.png

    4.3 ELK

    image.png

    问题与思考

    Q:graylog 按日期切割,日志存在冗余
    A:
    Q:graylog 日志结果无法选中、高亮
    A:
    Q:日志结构输入&采集规范化
    A: 日志用途(统计、排查)
    记录关键信息
    日志文本分隔
    预定义字段、分级
    配置告警

    参考文档:

    Graylog 查询官方文档
    阿里云日志官方文档
    时序数据库原理