云计算百科
云计算领域专业知识百科平台

ELK如何收集服务器运行日志?到底是干什么的?到底是如何和操作系统以及计算机硬件交互的?一共包含哪些部分?

ELK是什么以及它收集服务器运行日志的作用

ELK是由Elasticsearch、Logstash和Kibana三个工具组成的一套强大的日志管理和分析平台。收集服务器运行日志就像是给服务器请了个“小秘书”,能把服务器干的事儿都记录下来。这些日志里藏着很多有用的信息,比如服务器啥时候忙啥时候闲,有没有出啥毛病,用户都干了啥操作。有了ELK,我们就能把这些日志整理好、分析好,这样就能让服务器更好地工作,还能及时发现并解决问题。

与操作系统和计算机硬件的交互

  • 和操作系统交互:Logstash这个组件就像个勤劳的小蜜蜂,它能跟操作系统说“我要拿日志文件啦”,然后通过操作系统提供的接口,去指定的文件夹里把日志文件拿出来。Elasticsearch和Kibana也会用操作系统的接口来做一些事儿,像读文件、开网络连接啥的。
  • 和计算机硬件交互:它们都得用计算机的硬件资源。Elasticsearch分析和存储日志的时候,会用CPU做计算,用内存来临时存数据,用硬盘把数据长久保存起来。Logstash收集日志也得用CPU和内存,Kibana展示日志数据的时候,会通过显卡把数据变成好看的图表在屏幕上显示出来。

ELK包含的部分

  • Elasticsearch:它就像一个超级大的图书馆管理员,把日志数据整理得井井有条,还能让我们快速找到想要的日志。它把日志数据存起来,建好多索引,这样我们搜日志的时候就能很快出结果。
  • Logstash:是个日志收集小能手,它能从各种地方把日志收集过来,像文件、数据库啥的。它还能把收集到的日志整理一下,去掉没用的部分,把格式变得统一,然后再把日志送给Elasticsearch。
  • Kibana:就像一个画家,能把Elasticsearch里的日志数据变成漂亮的图表、报表,让我们一眼就能看懂日志里的信息。

背后做的事情

  • Logstash会按照我们定好的规则去收集日志。它先找到日志文件,然后一行一行地读里面的内容。接着,它会用一些规则来检查和修改这些日志,比如把日期格式变得一样,把一些不需要的词去掉。处理完后,它就把日志打包送给Elasticsearch。
  • Elasticsearch收到日志后,会给它们建索引。就像给书贴上标签,这样我们搜的时候就能快速找到。它把日志存到硬盘上,这样数据就不会丢啦。
  • 当我们想看看日志里有啥信息的时候,就打开Kibana。Kibana会向Elasticsearch发请求,说“我要找这样的日志”。Elasticsearch收到请求后,就开始在它存的日志里找,找到后把结果发给Kibana。Kibana再把这些结果变成好看的图表、报表展示给我们。

使用场景

  • 网站监控:能看看用户啥时候访问网站,访问了哪些页面,这样就能知道网站哪里受欢迎,哪里需要改进。
  • 服务器性能监控:可以知道服务器的CPU、内存、硬盘用得咋样,要是发现有问题能赶紧解决。
  • 安全审计:查看有没有异常的登录、操作,能及时发现可能的安全威胁。

底层原理

  • Elasticsearch:用倒排索引的原理。就像字典一样,把日志里的关键词和对应的日志关联起来。我们搜关键词的时候,它能快速找到包含这个关键词的日志。它还能用分布式存储,把数据分散存到好多服务器上,这样又安全又快。
  • Logstash:基于事件驱动。有新的日志产生时,就会触发一个事件,然后它就按照我们定的规则处理这个日志。它用各种插件来完成不同的任务,像输入插件负责拿日志,过滤插件负责改日志,输出插件负责把日志送出去。
  • Kibana:通过和Elasticsearch的API交流来获取数据。它用前端技术,像HTML、CSS、JavaScript来做出好看的界面和图表。

数据结构和算法

  • 数据结构:Elasticsearch里用JSON格式来存日志数据,这就像一个大箱子,里面装着很多小盒子,每个小盒子都有个名字和对应的内容。比如一个日志可能存成这样:

{
"timestamp": "2024-01-01 12:00:00",
"message": "用户登录成功",
"user": "小明"
}

  • 算法:Elasticsearch在搜索的时候会用布尔搜索算法,能根据我们的搜索条件,像“包含这个词”“不包含那个词”,快速找到符合条件的日志。Logstash在处理日志的时候会用字符串匹配算法,看看日志里有没有特定的词。

代码示例

下面是一个简单的Logstash配置文件示例,用来收集服务器的日志文件并送到Elasticsearch:

# 输入部分,告诉Logstash从哪里拿日志
input {
file {
# 日志文件的路径,这里要改成你实际的日志文件路径
path => "/var/log/syslog"
# 从文件开头开始读
start_position => "beginning"
}
}

# 过滤部分,对日志进行处理
filter {
# 用grok插件来解析日志内容
grok {
# 匹配日志的格式,这里是一个简单的例子,要根据实际日志格式修改
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{WORD:log_level} %{GREEDYDATA:message}" }
}
}

# 输出部分,把处理后的日志送到哪里
output {
elasticsearch {
# Elasticsearch的地址和端口
hosts => ["localhost:9200"]
# 存到Elasticsearch里的索引名字
index => "server_logs"
}
}

代码解释
  • input部分:file插件表示从文件里拿日志,path指定了日志文件的路径,start_position设置从文件开头开始读。
  • filter部分:grok插件能把日志内容按照我们定的格式拆开。match里的规则能把日志分成时间戳、日志级别和日志消息三部分。
  • output部分:elasticsearch插件把处理后的日志送到Elasticsearch。hosts是Elasticsearch的地址和端口,index是存日志的索引名字。
赞(0)
未经允许不得转载:网硕互联帮助中心 » ELK如何收集服务器运行日志?到底是干什么的?到底是如何和操作系统以及计算机硬件交互的?一共包含哪些部分?
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!