SLS 初体验:采集、加工、查询分析及可视化(二)| 学习笔记

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 快速学习 SLS 初体验:采集、加工、查询分析及可视化。

开发者学堂课程【DevOps 日志分析实战 :SLS 初体验:采集、加工、查询分析及可视化(二)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/736/detail/13100


SLS 初体验:采集、加工、查询分析及可视化(二)

二.操作示例-Linux Syslog

Syslog 是类 Unix 操作系统上非常常见的一种日志,广泛应用于系统日志,但同样可作为应用输出日志的一种形式

本次用到的三类日志如下:

image.png

第一类常见的 OOM 日志,如果发生此日志代表进程超过了限制,进程是否存在内存泄漏的隐患。

第二类普通的应用日志,应用打出 info 日志。

第三类特殊应用登录日志,代表主机上登录的日志,一般做路径检测分析工作。

演示日志需要一台主机,购买 ECS。一般 Syslog 保存在 var log messages 目录下

image.png

运维几乎没负载,内容相对简单。Syslog 产生一定的随机性,为了实验流畅,手动 mock,实行 mock 脚本,输出到 tmp

[root@ecs-test-yyhmock-syslog]#nohup/mock_messages.py/tmp/mock_messages

[1] 17229

[root@ecs-test-yyh mock-syslog]#nohup: ignoring input and appending output to'nohup.out

[root@ecs-test-yyh mock-syslog]#

[root@ecs-test-yyh mock-syslog]#tail-f/tmp/mock_messa

ges

[1074.669060] Out of memory: Kill process 20680 (perl) score 487 or sacrifice child

Killed process 20680(perl),UID 0,total-vm:1072528kB,anon-rss;943192kB,file-rss:0kB,shmem-rss;0kB

Aug 26 09:41:53clusterx-master sshd[7181:pam_unix(ssh

d:auth):authentication failure: loename= uid=0 euid=0 ttv=ssh ruser= rhost=192.168.56.1user=root

Aug 26 09:41:54 clusterx-master systemd:Scopelibcontai

ner-8952-systemd-test-default-dependencies.scope has no PIDs. Refusing.

Aug 26 09:41:55 clusterx-master sshd[718]:Failed passwo

rd for root from192.168.56.1 port 54469 ssh2:RSA SHA256:W8j/QK8kV0Ab8/yTENQko8

Aug 26 09:41:56 clusterx-master sshd[13501]:Received di

sconnect from 192.168.56.1 port 64934:11: disconnected by user

Aug 26 09:41:57 clusterx-master sshd[13501]:Accepted publickey for root from 192.168.56.1 port 64934 ssh 2:RSA SHA256:W8j/QK8k

V0Ab8/yTENQko8

日志不断的产生,将日志采集到 OSS 上设计数据采集功能。

1.数据采集

对于主机文件数据的采集,业界常用 agent 采集。

开源:Filebeat Logstash  

SLS:自研 Logtail(百万装机量)高性能为了满足集团内部特殊的需求,在性能上做了很大优化。

SLS 控制台完成 Logtail 安装以及采集配置的设定

打开控制台

image.png

为了在 SLS 做数据接入和存储,创建 SLS 的 project,创建 SLS-test-log。

为了存储日志需要在 project 下创建对应的 Logstore。

点击加号,创建 Logstore,名称 test-Logstore,可以调整属性数量等

image.png 

完成 Logstore 后可以创 logtal,将配置下发到对应的机器

image.png

用创建好的 Logstore 做演示,为了接入数据在 logtal 创建小的配置,点击加号。

image.png

Syslog 是一行一行的日志,直接选择单行采集方式,点击单行文本。选择使用 Agent,机器装上 Agent。logtal提供了自建机器和 ECS 机器两种方式

image.png

ECS,如果是阿里云 ECS 可以直接在控制台安装,不需要登录机器。

image.png

如果是自建机器提供非常方便的安装脚本可以一键安装。

买 ECS,直接使用 ECS 方式安装,找到自己 ECS 机器,点击立即执行。

image.png

机器自动安装完成

image.png

安装成功可以看到 logtal 的进程

[root@ecs-test-yyh mock-syslog]# ps -efI grepilogtail

root 17439 1 0 09:44? 00:00:06 /usr/local/ilogtail/ilogtail

root 17441 17439 1 09:44?00:00:00/usr/local/ilogtail/ilog

tail

root 17492 17012 0 09:44 pts/0 00:00:00grep--color=auto ilogtail

[root@ecs-test-yyh mock-syslog]#/etc/init.d/ilogtaildstat

us

ilogtail is running

[root@ecs-test-yyh mock-syslog]#

logtal 采用首部进程+工作进程的模式,保证工作进程意外退出可以用首部进程拉起,保证数据采集的可靠性。

logtal 安装完毕点击确认安装完毕。

创建机器组,机器组为了方便管理很多主机,主机可能划分为前端应用、后端应用,针对不同分类的应用有不同的采集项,通过机组的概念做划分。安装完成后 IP 地址自动填充,填写机组名字。

image.png

采集应用机器组需要将我的机器组移到应用的链条里。

image.png

点击下一步。

配置采集配置,填写配置名 mock_ syslog,输出 tam 下的 mock messages,文件填 mock messages,选择极简模式。其它暂时使用默认配置,点击下一步。

查询分析配置,使用默认。可以看到采集的数据

点击下一步,点立即尝试。

image.png

过程有配置的下发,有一定延迟。一行行日志被放到 content 字段里。

完成数据接入过程,接入后需要看。

OOM 日志,通过关键字可搜索。

image.png

登录日志可通过 sshd 关键字找到。

image.png

日志服务提供查询语法的支持能力,除了关键字还可以用谓词做进阶比如 not sshd,除了 sshd 普通应用日志。

image.png

接入日志发现日志搭行,每一行包含其它信息,IP、 port、user,很难做进一步分析,有多少条消息是 Faled password 代表有人用密码登录但失败,可能代表入侵的行为。为了做进一步分析,对数据做进一步处理。

2.数据加工

image.png

图囊括了数据加工可能支持的场景

3.分析目标:

哪些进程发生了 OOM?

前面搜索 OOM 日志,可知哪个 PID 进程名产生 OOM,可分析哪个进程名发生了 OMM。

哪些进程产生了系统日志,分别产生了多少?

应用频繁的产生系统日志,突增、突发都是异常的信号

短时间内是否有大量ssh密码登录失败?

可能代表入侵攻击的行为

信息囊括在 content 字段里,加工是将 content 字段里的内容提取,对整个日志做规整

完成上述目标的加工步骤:

.标记 OOM 日志

image.png

通过对 OOM 观察,有两个关键字 OMM、killed,从逻辑上发现有关键字意味日志为 OMM 日志,可对其进行日志打标。

.解析Syslog基本字段

contont:Aug 26 09:51:27clustbrx-mactor tond[13501]:Acc

epted pubickey for root from192.168.56.1 port 64934 ssh2:RSA SHA256:W/QKBKVAbByTENGko8

时间、可选进程名、可选的 pid,后面是 messages 字段内容,可根据内容做提取,拿出来,可分析日志是哪个进程、pid 是什么

.丰富登录日志

content:Aug26 00:52:02clustbrx-mactor sahd[1350]:Acce

pted pubickey for root from 192.168.56.1 port 64934 ssh2:RSHA SH258W8/QKBkV0AbByTENQko8

_source:172.16.157.185

_tag_:_hostame_:ocs-test-yh

_tag__:_ptt_:/tmp/mock_mest aget

_topic__:

content:Aug 26 09:52:01clusterx-mactor shd[1301]:Recevi

ed disconnect from192.168.56.1port64934:11: disconnect

ed by user

_scource_: 172.18.157.185

_tag_:_hosthama_:ocs-test-yyn

_tag_:_path_:/tmp/mock_mest aget

_topic_

content:Aug 26 02:52:00 clusterx-master ashd[718]t:Fale

d password for roat from 1921656.1 por 5448 ssh2:RSA SHA258 W8/QKBkV0AbByTENQko8

Accepted pubickey 代表成功登录,可标记登录,disconnect 代表用户下线,离开主机,可以打 disconnect 行为标。Filed password 可认为密码登录失败,可增加标。抽象起来是对日志做进一步处理,增加额外的字段,在现有字段提取出关心的字段。

数据加工做三件事

第一标记 OOM 日志

数据加工的按钮,点击。

删除事先弄好的,保留第一个。

解析 oom_kill 日志

e_if(op_or(

regex_natch(v("content"),"Out of memory"),

regex_natch(v("content"),"Killed process")),

e_compose(

e_set("log_type","oom_kill"),

e_regex(“content","process(?<pid>[e-9]*)\((?<process>[a-

za-z0-9 ]")\)")))

通过简单的编排,完成了一件事。发现 Out of Memory、killed 认为是 OMM 日志,需要做标记。标记最好的方式是加字段,比如log_type 字段叫做 oom_kill。判断是否为 OMM日志,用 or 算子,里面包两个匹配。

如果发现 content 字段里带 Out of Memory 或 killed process,认为是 OOM 日志。行为一个是加新字段log_type,另一个 OMM 日志可提取 PID 或进程名,加额外的提取。将数字提取到 process 后的 pid 字段。

认证编排语句是否生效可点击加入测试数据,将原始数据加到测试数据。

点击预览,可以看到语句在测试数据会得到怎样的结果。

image.png

两条日志没变,新增了 log_type 字段,打上 oom_kill 的标,同时将 process pid 提取出来,方便做后面的分析。

第二解析 Syslog 基本字段

输入 not Out of Memory or killed,找到 Syslog 日志,进入加工。

contont:Aug 26 09:51:27clustbrx-mactor tond[13501]:Acc

epted pubickey for root from192.168.56.1 port 64934 ssh2:RSA SHA256:W/QKBKVAbByTENGko8

时间、主机名、进程名,进程 pid 可选,冒号隔开后面是 messages 字段,提取字段。

# 解析 syslog 基本字段

e_regexl"content”,"(?<systen_time>[a-zA-z 0-9:]{15))(?<

chostname>[a-zA-z8-9\-]“)(?<process>([a-zA-ze-9\-]*))(\((?<pid>[0-9]*)\])?: (?

<nessage>.*)”)

贴上解析 syslog 基本字段,对 content 进行字段提取,提取 systen_time、chostname、process、pid、nessage五部分。加入到测试数据,第一条为刚加入的。加入结果日志提取到systen_time、chostname、process、nessage,因为没有 pid,所以没有提取到 pid。可加入有条件的,提取出 pid。

完成解析 syslog 基本字段,可知每一条 syslog 来源。

第三丰富登录日志

搜索 sshd

content:Aug26 00:52:02clustbrx-mactor sahd[1350]:Acce

pted pubickey for root from 192.168.56.1 port 64934 ssh2:RSHA SH258W8/QKBkV0AbByTENQko8

_source:172.16.157.185

_tag_:_hostame_:ocs-test-yh

_tag__:_ptt_:/tmp/mock_mest aget

_topic__:

content:Aug 26 09:52:01clusterx-mactor shd[1301]:Rocevi

ed disconnect from192.168.56.1port64934:11: disconnect

ed by user

_scource_: 172.18.157.185

_tag_:_hosthama_:ocs-test-yyn

_tag_:_path_:/tmp/mock_mest aget

_topic_

content:Aug 26 02:52:00 clusterx-master ashd[718]t:Fale

d password for roat from 1921656.1 por 5448 ssh2:RSA SHA258 W8/QKBkV0AbByTENQko8

有 Accepted pubickey、Faled password、disconnect字段,对三类日志做打标,Rocevied disconnect 连接断开日志,Accepted pubickey 登录成功日志,Faled password 尝试登录失败日志,进入数据加工。

#针对 sshd,进一步提取字段

e_if(e_search( process=="sshd"'),

e_compose(

e_regex("content",“user(?<user>(a-zA-z0-9]")”),

e_regex("content",grok(*%(IP;ip}')),

e_regex("content","port (?<port>[0-9]")"),

e_if(regex_match(v("content"),"Received disconnect from")

e_set("sshd_action”,"client_disconnect")), e_if(regex_match(v("content"),"Failed password"),

o_sot("sshd_action”,“cliont_password_fail")), e_if(regex_match(v(“content"),"Accepted publickey"),

e_set("sshd_action”,“client_login"))

))

登录日志产生的进程为 sshd,if e_search( process=="sshd”为条件,满足条件做一系列的提取过程。比如在 content 字段提取 ip。content 字段 Received disconnect 代表断开社交连接,加入字段 sshd_action,打入值 client_disconnect。类似可将 Failed password 打入 cliont_password_fail 标,Accepted publickey 打入 client_login 标。

完成对登录日志进一步处理,填加额外的信息,将日志加入测试数据,disconnect 多了字段,同时完成了基本 syslog 字段拆解,相对多一个 disconnect 字段。

Failed password 类似的多了password 的值,登录日志多了 client_login 的值。完成开始原始数据的处理,提取出感兴趣的信息,保存为持续运行的加工任务,能不断的在 syslog 读取日志,从语言读取日志写到最终目标的 Logstore。

将配置的目标保存起来,点击保存,名称 syslog 处理测试。存储目标,处理好的字段放到另一个 Logstore,目标名称为处理时的输出目标 target0,目标库 processed_syslog 所有目标处理后重新写到 Logstore 里。加工范围选择某时间开始,从当前开始执行任务,任务处理 syslog 里的数据,写入到 processed_syslog,点击确认。

创建好后台的加工任务,在后台运行,后台开始有延迟。

完成数据处理后要完成数据分析的目标,分析目标提供了分析的方式,比如查询后写 SQL92 的方式分析目标。写 SQL 满足三个分析目标。

数据加工完成,原数据

image.png

处理的数据会源源不断的处理

写 SQL 处理目标,分析需要设置索引,未设置索引可使用自动生成索引的功能,读取最新一条日志,从中提取字段作为索引,作为索引字段的参考。

image.png

点击确定,可做选择删除不感兴趣的字段。调整字段的属性,如果认为是 long类型而不是 text 类型可做调整。

image.png

设置索引后开始分析,首先分析哪些进程访问 OMM。

已经提取出 OMM 字段,通过 log_type 可快速筛选出所有 OMM 日志,每个 OMM 日志都将 process pid 提取出,很方便知道哪些进程发生了 OMM 以及发生了多少次,process 作为聚合列 group by process,想看到发现 OMM 次数的排序。

产生表格,表格显示四个进程发生了 OMM 以及分别发生的次数,表格的呈现不利于观察占比,比如哪个 OMM 发生进程最多的情况。提供了丰富的可视化能力,可根据自己的需要选择。

image.png

呈现比例用饼图更好,可以选择饼图,可以直观地看到哪个进程发生的 OMM 次数更多。

image.png

my_server 占比更多。建立的图表可保存,保存到仪表盘,可通过仪表盘看到最新数据所渲染的结果,不需要每次审出数据,仪表盘名称 Syslog 分析报表测试,图表名称 OOM 应用分布,点击确认

image.png

点击仪表盘可以看到 Syslog 分析测试的仪表盘。

image.png

通过调整时间选择或新数据的到来,自动分析最近十五分钟,可不断刷新呈现最新情况。仪表盘中可做编辑,图播放或加文字性的表述。拖一个文本可输入内容,定制化可完全根据自己需要做。点保存

image.png

实际一直在发生 OMM,有些应用的版本没有及时更新会一直发 OMM,是否代表 OMM 次数为固定的,今天和明天 OMM 数量不会相差太多。可用同环比功能,比较一段时间的数据与前段时间相同一段时间内的数据, OMM 变多还是变少判断是否有新的 OMM 出现。同环比可对一段时间数据做聚合,比如 count 多少 OMM 日志 compare 十分钟之前的情况,得出结果汇聚出增长的趋势。

数据很少,十分钟之前没有数据,增长变得无限大。

拖入导入的数据,此范围与十分钟之前同等范围内的增长趋势。

image.png

更好的呈现指标可用单值图,选择同比环比图可看出增长,负自动呈现绿色,正为红色,可自行配置。

可保存到仪表盘

image.png

打开仪表盘第二张图表加入,可通过同样方式调整位置。

通过分析对 OMM 日志基本了解。

第二个分析哪些进程产生了系统日志,分别产生了多少。

分析不再是 OMM,而是整个系统 select。每个系统都提取出 process 字段,通过类似的统计分析。整个系统范围内哪些进程产生了系统日志,分别产生了多少。

预览图标

image.png

登录日志最多,可看其它进程分别多少。可换饼图,其它形式饼图,环形、南丁格尔玫瑰图,更加明显看到差异性

选用换图做保存操作

image.png

第三条分析短时间内是否有大量 ssh 密码登录失败。

登录日志全部来自进程,sshd 搜可得到所有进程日志。

image.png

对每类特殊日志打标放到 sshd_action 字段,通过左边快速分析,点小眼睛可看到底有几类值。

四类值代表没有字段,没有打到普通日志,三类是关心的日志。点击 client_password_fall,可看登录失败日志

image.png

尝试登录失败 ip 信息。

筛选出分析的日志可做进一步处理,可看来自哪个 ip,失败登录次数是多少

image.png

56.1内网获取及时登录包不用太关心,但有可能此主机被入侵,做进一步的排查。图表可直接保存到仪表盘,可直接看哪些字段 ip,做进一步调查。名称 IP 来源

只有 ip 不好做更大范围的划分,如果 ip 有成百上千个很难一一做筛查,对 ip 做发划分,哪些 ip 有共性,最大的共性是地理位置的共性。对 ip 来源做转换,转换为国家,看哪个国家 ip 来源更多。可用日志服务 ip_to_country 方法,ip 调动算子,转换为国家。以国家的方式对整个日志次数做聚合。

image.png

显示美国15次,没有查询到的80次。绘制此图可用世界地图,将 ip 划分到对应的地方。

通过颜色深度发现哪个国家来源 ip 更多。

image.png

保存到仪表盘。

完成对 ip 登录失败的分析。

将完成的报表排序得到最终报表。

image.png

可定时刷新或每天选择范围查看,可看今天主机的情况和应用日志的变化。通过订阅功能对整个报表创建定期的订阅,比如9点发送当前报表的状况。

更多的示例可登录日志服务的官网,官网提供更多示例。首页用户注册与 Demo

各个场景日志分析的仪表盘,包含用到的分析语句,可点进去看最终效果。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
9天前
|
Kubernetes API Docker
跟着iLogtail学习容器运行时与K8s下日志采集方案
iLogtail 作为开源可观测数据采集器,对 Kubernetes 环境下日志采集有着非常好的支持,本文跟随 iLogtail 的脚步,了解容器运行时与 K8s 下日志数据采集原理。
|
16天前
|
缓存 监控 算法
分析慢日志文件来优化 PHP 脚本的性能
分析慢日志文件来优化 PHP 脚本的性能
08-06-06>pe_xscan 精简log分析代码 速度提升一倍
08-06-06>pe_xscan 精简log分析代码 速度提升一倍
|
2月前
|
存储 消息中间件 监控
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统ELK、日志收集分析
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统、日志收集分析。日志级别从小到大的关系(优先级从低到高): ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF 低级别的会输出高级别的信息,高级别的不会输出低级别的信息
|
2月前
|
算法 关系型数据库 程序员
第一周算法设计与分析:A : log2(N)
这篇文章介绍了解决算法问题"输入一个数N,输出log2N(向下取整)"的三种编程思路,包括使用对数函数和幂函数的转换方法,以及避免浮点数精度问题的整数逼近方法。
|
2月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
|
24天前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
1月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
66 9
|
2月前
|
开发框架 .NET Docker
【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
|
2月前
|
存储 监控 安全
下一篇
无影云桌面