每日一学——日志管理工具(ELK Stack)

5.1 ELK Stack
5.1.1 Elasticsearch索引机制

嘿,小伙伴们!今天我们要聊聊ELK Stack------一套由Elasticsearch、Logstash和Kibana组成的强大日志管理工具集。通过这套工具,我们可以轻松地收集、存储、搜索和可视化日志数据。首先,让我们来了解Elasticsearch的索引机制。

Elasticsearch索引机制:

Elasticsearch 是一个分布式的搜索引擎和存储系统,它使用倒排索引来加速全文搜索。在Elasticsearch中,数据是以文档的形式存储在索引中的。

索引机制的关键概念:

    1. 索引(Index):类似于数据库中的表,用于存储一类数据。
    1. 文档(Document):一条记录或一条日志消息,是JSON格式的数据。
    1. 映射(Mapping):定义了索引中文档的字段类型和结构。
    1. 分片(Shard):索引的逻辑分片,用于水平扩展存储能力。
    1. 副本(Replica):索引的备份,用于提高数据的可用性和容错性。

创建索引:

在Elasticsearch中创建索引时,可以指定索引的设置和映射。

PUT myindex
{
"settings":{
"number_of_shards":3,
"number_of_replicas":1
},
"mappings":{
"properties":{
"@timestamp":{"type":"date"},
"message":{"type":"text"},
"source":{"type":"keyword"}
}
}
}

在这个例子中,我们创建了一个名为myindex的索引,设置了3个分片和1个副本,并定义了三个字段:@timestampmessagesource

5.1.2 Logstash过滤器配置

Logstash 是一个数据处理管道,用于接收、转换和发送数据到Elasticsearch。通过配置过滤器(filters),我们可以对日志数据进行清洗和格式化。

过滤器配置:

Logstash过滤器可以对输入的日志数据进行各种处理,如分割字段、添加标签、去除噪声等。下面是一些常用的过滤器:

    1. grok:用于解析非结构化的日志数据,并提取出有意义的字段。
    1. mutate:用于修改字段,如删除、重命名等。
    1. date:用于解析日期时间字段,并转换成Elasticsearch支持的时间格式。
    1. split:用于根据正则表达式分割日志数据。

配置示例:

input {
  beats { port =>5044}
}

filter {
  grok {
    match =>{"message"=>"%{COMBINEDAPACHELOG}"}
}
  date {
    match =>["timestamp","ISO8601"]
}
  mutate {
    add_field =>{"[@metadata][event_type]"=>"weblog"}
}
}

output {
  elasticsearch { hosts =>["localhost:9200"]}
}

在这个例子中,我们配置了Logstash来接收来自Beats的数据,并使用grok过滤器来解析日志格式,使用date过滤器来解析时间戳,最后使用mutate过滤器来添加事件类型字段。

5.1.3 Kibana仪表盘设计

Kibana 是一个用于可视化Elasticsearch数据的Web界面。通过Kibana,我们可以轻松地创建仪表盘来展示日志数据的趋势和统计信息。

仪表盘设计步骤:

    1. 创建索引模式:在Kibana中,首先需要创建一个索引模式来指定要可视化的数据源。
    • • 在Kibana中选择"Management" -> "Index Patterns",点击"Create index pattern"。

    • • 输入索引名称前缀(如logstash-*)。

    1. 创建仪表盘:在Kibana中,可以创建一个新的仪表盘来展示数据。
    • • 选择"Discover"来探索数据。

    • • 选择"Visualize"来创建图表。

    • • 选择"Dashboard"来组合多个图表。

创建图表示例:

假设我们想要创建一个图表来展示过去一周内不同来源的日志数量。

    1. 创建数据视图:在"Discover"中,筛选出过去一周的日志数据。
    1. 创建柱状图:在"Visualize"中,选择"柱状图",并配置数据来源和字段。
    1. 添加到仪表盘:在"Dashboard"中,将创建的图表拖拽到仪表盘中。
5.1.4 实战案例:日志数据收集与分析

现在,让我们通过一个实际的例子来看看如何使用ELK Stack来收集和分析日志数据。假设我们需要收集并分析来自多台服务器的日志。

步骤1:安装Elasticsearch、Logstash和Kibana

    1. 下载并安装Elasticsearch 对于Linux系统,可以使用包管理器安装:sudo apt-get update
      sudo apt-get install elasticsearch
    1. 下载并安装Logstash sudo apt-get install logstash
    1. 下载并安装Kibana sudo apt-get install kibana
    1. 启动服务 使用命令启动Elasticsearch、Logstash和Kibana:sudo systemctl start elasticsearch
      sudo systemctl start logstash
      sudo systemctl start kibana

步骤2:配置Logstash

    1. 创建Logstash配置文件/etc/logstash/conf.d目录下创建一个名为01-log-input.conf的文件:input {
      beats {
      port =>5044
      }
      }

    filter {
    grok {
    match =>{"message"=>"%{COMBINEDAPACHELOG}"}
    }
    date {
    match =>["timestamp","ISO8601"]
    }
    mutate {
    add_field =>{"[@metadata][event_type]"=>"weblog"}
    }
    }

    output {
    elasticsearch {
    hosts =>["localhost:9200"]
    index =>"logstash-%{+YYYY.MM.dd}"
    }
    }

    1. 重新加载Logstash配置 sudo systemctl reload logstash

步骤3:安装Beats

    1. 下载并安装Filebeat 对于Linux系统,可以使用包管理器安装:sudo apt-get install filebeat
    1. 配置Filebeat/etc/filebeat/filebeat.yml中配置Filebeat:filebeat.inputs:
      -type:log
      enabled:true
      paths:
      -/var/log/nginx/access.log
      -/var/log/nginx/error.log

    output.logstash:
    hosts:["localhost:5044"]

    1. 启动Filebeat sudo systemctl start filebeat

步骤4:配置Kibana

    1. 创建索引模式 在Kibana中,选择"Management" -> "Index Patterns",点击"Create index pattern",输入索引名称前缀(如logstash-*)。
    1. 创建仪表盘在Kibana中,选择"Dashboard" -> "Create Dashboard",并添加需要的图表。

通过以上步骤,我们就成功地使用ELK Stack收集并分析了日志数据。ELK Stack的强大之处在于它可以处理海量的日志数据,并提供丰富的可视化工具来帮助我们理解数据背后的故事。希望这个例子能帮助你更好地理解和使用ELK Stack!

好了,现在你已经掌握了使用ELK Stack进行日志管理的基本技能,赶紧动手试试吧!加油,运维小伙伴们!

相关推荐
张敬之、4 分钟前
http源码分析
java
徒步僧12 分钟前
Docker安装Prometheus和Grafana
java·开发语言
Aimin202217 分钟前
渗透测试实战-DC-1
java·linux·selenium
m0_7493175220 分钟前
springboot优先级和ThreadLocal
java·开发语言·spring boot·后端·学习·spring
小小小妮子~21 分钟前
深入解读MVCC中的三大日志:Undo Log、Redo Log和B-Log
服务器·数据库·oracle·日志
lzz的编码时刻21 分钟前
ArrayList 与 LinkedList 对比与源码解读
java·后端
vvw&31 分钟前
如何在 Ubuntu 22.04 上安装 Cassandra NoSQL 数据库教程
linux·运维·服务器·数据库·ubuntu·nosql
白露与泡影1 小时前
Spring Boot中的 6 种API请求参数读取方式
java·spring boot·后端
CodeClimb1 小时前
【华为OD-E卷 - 服务失效判断 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
CodeClimb1 小时前
【华为OD-E卷 - 九宫格按键输入 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od