WEBKT

ELK日志追踪系统搭建实战:从小白到高手的进阶之路

36 0 0 0

什么是ELK Stack?

为什么选择ELK Stack?

ELK Stack应用场景

实战:搭建ELK日志追踪系统

准备工作

安装和配置Elasticsearch

安装和配置Logstash

安装和配置Kibana

在Kibana中查看日志

进阶技巧

使用Filebeat代替Logstash

使用Ingest Node预处理数据

使用Logstash的多种插件

优化Elasticsearch性能

使用Kibana进行高级可视化分析

总结

你是否曾为海量日志的管理和分析而头疼?你是否想过构建一个强大的日志追踪系统,却苦于无从下手?别担心,今天我们就来聊聊ELK Stack,手把手教你搭建一个高效的日志追踪系统,让你从小白变身日志管理高手!

什么是ELK Stack?

ELK Stack是由Elasticsearch、Logstash和Kibana三个开源工具组成的日志管理解决方案。它们各司其职,共同构建起一个强大的日志处理平台。

  • Elasticsearch(搜索和分析): 一个基于Lucene的分布式搜索引擎,负责存储和索引日志数据。你可以把它想象成一个超级强大的“日志数据库”,能够快速地搜索和分析海量日志。
  • Logstash(数据收集和处理): 一个数据收集引擎,负责从各种来源收集日志数据,并进行过滤、转换等处理,最终将数据发送到Elasticsearch。你可以把它看作一个“日志搬运工”,负责把各种格式的日志数据整理成Elasticsearch能识别的格式。
  • Kibana(可视化展示): 一个数据可视化平台,负责将Elasticsearch中的数据以图表、仪表盘等形式展示出来。你可以把它理解为一个“日志展示大屏”,让你能够直观地查看和分析日志数据。

为什么选择ELK Stack?

ELK Stack之所以成为众多开发者和运维工程师的首选,主要有以下几个原因:

  • 开源免费: ELK Stack是完全开源的,你可以免费使用,无需担心授权费用。
  • 易于部署: ELK Stack的部署相对简单,你可以通过Docker等容器化技术快速搭建。
  • 功能强大: ELK Stack提供了强大的搜索、分析和可视化功能,能够满足各种日志管理需求。
  • 社区活跃: ELK Stack拥有庞大的用户社区,你可以轻松找到各种学习资源和技术支持。
  • 扩展性强: Elasticsearch 的分布式特性,使得其可以轻松扩展,处理PB级别的数据。

ELK Stack应用场景

ELK Stack的应用场景非常广泛,主要包括:

  • 日志集中管理: 将分散在不同服务器、不同应用中的日志数据集中起来,方便统一管理和分析。
  • 故障排查: 通过搜索和分析日志数据,快速定位系统故障原因。
  • 性能监控: 监控系统和应用的性能指标,及时发现性能瓶颈。
  • 安全审计: 分析安全日志,发现潜在的安全威胁。
  • 业务分析: 通过分析用户行为日志,了解用户行为习惯,优化产品设计。

实战:搭建ELK日志追踪系统

接下来,我们就以一个实际的案例,来演示如何搭建一个简单的ELK日志追踪系统。我们将以一个Web应用为例,收集并分析Nginx访问日志。

准备工作

  1. 准备服务器: 准备一台Linux服务器(本文以CentOS 7为例),并确保服务器能够访问互联网。
  2. 安装Java环境: Elasticsearch和Logstash需要Java环境,请确保服务器已安装JDK 8或更高版本。
    yum install -y java-1.8.0-openjdk
    

安装和配置Elasticsearch

  1. 下载Elasticsearch:

    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.13-x86_64.rpm #注意下载适合你系统的版本和最新稳定版
    
  2. 安装Elasticsearch:

    rpm -ivh elasticsearch-7.17.13-x86_64.rpm
    
  3. 配置Elasticsearch:
    修改Elasticsearch配置文件 /etc/elasticsearch/elasticsearch.yml,主要修改以下几个配置项:

    cluster.name: my-application #集群名称,可以自定义
    node.name: node-1 #节点名称,可以自定义
    network.host: 0.0.0.0 #监听地址,0.0.0.0表示监听所有地址
    http.port: 9200 #HTTP端口,默认为9200
    #discovery.seed_hosts: ["192.168.1.10", "192.168.1.11"] #集群发现,单节点部署可以注释掉
    #cluster.initial_master_nodes: ["node-1"] #初始主节点,单节点部署可以注释掉
  4. 启动Elasticsearch:

    systemctl start elasticsearch
    systemctl enable elasticsearch
  5. 验证Elasticsearch是否启动成功:

    curl http://localhost:9200
    

    如果看到类似以下输出,则表示Elasticsearch启动成功:

    {
    "name" : "node-1",
    "cluster_name" : "my-application",
    ...
    "version" : {
    "number" : "7.17.13",
    ...
    },
    ...
    }

安装和配置Logstash

  1. 下载Logstash:

    wget https://artifacts.elastic.co/downloads/logstash/logstash-7.17.13-x86_64.rpm #下载对应版本
    
  2. 安装Logstash:

    rpm -ivh logstash-7.17.13-x86_64.rpm
    
  3. 配置Logstash:

    创建Logstash配置文件/etc/logstash/conf.d/nginx.conf,内容如下:

    input {
    file {
    path => "/var/log/nginx/access.log" #Nginx访问日志路径,根据实际情况修改
    start_position => "beginning" #从文件开头开始读取
    sincedb_path => "/dev/null" # 不记录读取进度, 每次重启都重头开始. 调试时使用,生产环境慎用
    }
    }
    filter {
    grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" } #使用grok插件解析Nginx日志
    }
    date {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] #解析时间字段
    }
    }
    output {
    elasticsearch {
    hosts => ["http://localhost:9200"] #Elasticsearch地址
    index => "nginx-access-%{+YYYY.MM.dd}" #索引名称,按天生成
    }
    #stdout { codec => rubydebug } #输出到控制台,方便调试
    }

    配置详解:

    • input: 定义了日志数据的来源。这里使用file插件从Nginx的访问日志文件/var/log/nginx/access.log中读取数据。 start_position => "beginning"表示从文件开头开始读取,sincedb_path => "/dev/null"表示不记录上次读取的位置,每次都从头读取(调试用)。
    • filter: 定义了对日志数据的处理。这里使用grok插件解析Nginx日志,grok插件使用正则表达式来解析日志,%{COMBINEDAPACHELOG}是一个预定义的grok模式,可以匹配常见的Nginx日志格式。date插件用于解析日志中的时间字段。
    • output: 定义了日志数据的输出。这里使用elasticsearch插件将日志数据发送到Elasticsearch,hosts指定Elasticsearch的地址,index指定索引名称,这里使用nginx-access-%{+YYYY.MM.dd}的格式,按天生成索引。
    • stdout { codec => rubydebug } 将内容输出到控制台,方便调试。
  4. 启动Logstash:

    systemctl start logstash
    systemctl enable logstash

安装和配置Kibana

  1. 下载Kibana:

    wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.13-x86_64.rpm #下载对应版本
    
  2. 安装Kibana:

    rpm -ivh kibana-7.17.13-x86_64.rpm
    
  3. 配置Kibana:

    修改Kibana配置文件/etc/kibana/kibana.yml,主要修改以下几个配置项:

    server.port: 5601 #Kibana监听端口,默认为5601
    server.host: "0.0.0.0" #监听地址
    elasticsearch.hosts: ["http://localhost:9200"] #Elasticsearch地址
  4. 启动Kibana:

    systemctl start kibana
    systemctl enable kibana
  5. 访问Kibana:

    在浏览器中访问http://<服务器IP>:5601,即可打开Kibana Web界面。

在Kibana中查看日志

  1. 创建索引模式:

    首次访问Kibana时,需要创建索引模式。点击左侧导航栏的“Management” -> “Stack Management” -> “Index Patterns” -> “Create index pattern”,输入nginx-access-*,点击“Next step”,选择@timestamp作为时间字段,点击“Create index pattern”。

  2. 查看日志:

    点击左侧导航栏的“Discover”,即可查看Nginx访问日志。你可以在搜索框中输入关键词进行搜索,也可以使用Kibana提供的各种可视化工具对日志数据进行分析。

进阶技巧

使用Filebeat代替Logstash

Filebeat是一个轻量级的日志收集器,比Logstash更节省资源。 如果你只需要简单的日志收集功能,可以考虑使用Filebeat代替Logstash。

使用Ingest Node预处理数据

Elasticsearch的Ingest Node可以在数据写入Elasticsearch之前对数据进行预处理,例如添加字段、删除字段、修改字段值等。如果你的日志处理逻辑比较复杂,可以考虑使用Ingest Node。

使用Logstash的多种插件

Logstash提供了丰富的插件,包括各种输入插件、过滤器插件和输出插件,你可以根据自己的需求选择合适的插件。 比如:

  • jdbc input 插件可以从数据库读取数据。
  • geoip filter 插件可以根据IP地址解析地理位置信息。
  • elasticsearch output 插件可以将数据输出到不同的 Elasticsearch 集群。

优化Elasticsearch性能

  • 合理配置Elasticsearch集群: 根据服务器硬件配置和数据量大小,合理配置Elasticsearch集群的节点数、分片数和副本数。
  • 使用冷热架构: 将不常用的历史数据存储在低成本的存储介质上,将常用的热数据存储在高性能的存储介质上。
  • 优化索引: 合理设计索引的mapping,避免使用过多的字段和不必要的分词器。

使用Kibana进行高级可视化分析

Kibana提供了丰富的可视化工具,例如折线图、柱状图、饼图、地图等,你可以根据自己的需求创建各种仪表盘,对日志数据进行多维度的分析。

总结

通过本文的学习,相信你已经对ELK Stack有了一个初步的了解,并且掌握了搭建ELK日志追踪系统的基本方法。当然,ELK Stack的功能远不止于此,希望你在实际应用中不断探索和实践,成为真正的日志管理高手!

记住,遇到问题不要怕,多查阅官方文档,多参与社区讨论,你一定能够解决各种难题!

技术宅小黑 ELK日志追踪Elasticsearch

评论点评

打赏赞助
sponsor

感谢您的支持让我们更好的前行

分享

QRcode

https://www.webkt.com/article/8048