热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ELK之logstash[随笔记录]

1、logstash简介?logstash是一个数据分析软件,主要目的是分析log日志。整一套软件可以当作一个MVC模型,logstash是controller层,Elastics

1、logstash简介

? logstash是一个数据分析软件,主要目的是分析log日志。整一套软件可以当作一个MVC模型,logstash是controller层,Elasticsearch是一个model层,kibana是view层。
首先将数据传给logstash,它将数据进行过滤和格式化(转成JSON格式),然后传给Elasticsearch进行存储、建搜索的索引,kibana提供前端的页面再进行搜索和图表可视化,
它是调用Elasticsearch的接口返回的数据进行可视化。logstash和Elasticsearch是用Java写的,kibana使用node.js框架。


架构图:

技术分享图片


3、详解

(1)inpute

File

File:从指定的文件中读取事件流;
    使用FileWatch(Ruby Gem库)监听文件的变化。
    .sincedb:记录了每个被监听的文件的inode,major number,minor nubmer,pos;

#-----
#从/var/log/messages读取日志
[[email protected] conf.d]#  cat filesample.conf 
input {
  file {
      path => ["/var/log/messages"]
      type => "system"
      start_position => "beginning"
  }
}

output {
  stdout {
      codec => rubydebug 
  }
}

#-----
#日志输出到了标准输出
[[email protected] conf.d]# logstash -f /etc/logstash/conf.d/filesample.conf --configtest
[[email protected] conf.d]# logstash -f /etc/logstash/conf.d/filesample.conf |head -n 8
{
       "message" => "Mar 29 04:09:26 localhost journal: Runtime journal is using 6.0M .",
      "@version" => "1",
    "@timestamp" => "2020-04-22T15:09:19.310Z",
          "host" => "node4",
          "path" => "/var/log/messages",
          "type" => "system"
}


udp

udp:通过udp协议从网络连接来读取Message,其必备参数为port,用于指明自己监听的端口,host则用于指明自己监听的地址;

#在node3上安装collectd,用它发送系统信息日志给node4,node4监听node3
#collectd是一个守护(daemon)进程,用来定期收集系统和应用程序的性能指标

#----
[[email protected] ~]# yum -y install collectd

#/etc/collectd.conf是配置文件,LoadPlugin是collectd启用的插件(收集哪些数据),
[[email protected] ~]# grep -v "^#" /etc/collectd.conf | grep -v "^$"
Hostname    "node3"
LoadPlugin syslog
LoadPlugin cpu
LoadPlugin df
LoadPlugin interface
LoadPlugin load
LoadPlugin memory
LoadPlugin network
   #有些插件需要做配置, 192.168.3.114是node4
    "192.168.3.114" "25826">    #发给谁,以及发送数据的端口(udp)
    

Include "/etc/collectd.d"

[[email protected] ~]# systemctl start collectd
[[email protected] ~]# systemctl status collectd


#----node4
[[email protected] conf.d]# cat udpsample.conf 
input {
  udp {
    port => 25826
    codec => collectd {}
    type => "collectd"
  }
}

output {
  stdout {
    codec => rubydebug
  }
}

#----
[[email protected] conf.d]# logstash -f /etc/logstash/conf.d/udpsample.conf
Logstash startup completed
{
               "host" => "node3",
         "@timestamp" => "2020-04-22T15:55:08.119Z",
             "plugin" => "df",
    "plugin_instance" => "run-user-0",
      "collectd_type" => "df_complex",
      "type_instance" => "free",
              "value" => 190799872.0,
           "@version" => "1",
               "type" => "collectd"
}
{
               "host" => "node3",
         "@timestamp" => "2020-04-22T15:55:08.119Z",
      "type_instance" => "nice",
             "plugin" => "cpu",
    "plugin_instance" => "0",
      "collectd_type" => "cpu",
              "value" => 62,
           "@version" => "1",
               "type" => "collectd"
}
    ......


redis

从redis读取数据,支持redis channel和lists两种方式;


(2)filter

grok

grok:用于分析并结构化文本数据;目前是logstash中将非结构化日志数据转化为结构化的可查询数据的不二之选。

grok是一种采用组合多个预定义的正则表达式,用来匹配分割文本并映射到关键字的工具。通常用来对日志数据进行预处理。

可处理syslog,apache,nginx…等日志;

grok默认内置120个预定义匹配字段(可直接用),可查看以下文件:

/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-0.3.0/patterns/grok-patterns

也可以自己定义,自定义的加入上面的文件中即可,或者在/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-0.3.0/patterns中新建一个专门的文件,也行;


例子:

[[email protected] conf.d]# cat groksample.conf 
input {
  stdin {}
}

filter {
  grok {
    match => { "message" => "%{IP:clientip} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
  }
}

output {
  stdout {
    codec => rubydebug
  }
}


# {IP:clientip}     ip是匹配时的字段,clientip是输出时显示的字段名字

%{IP:clientip} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}


检查&启动:

[[email protected] conf.d]# logstash -f /etc/logstash/conf.d/groksample.conf --configtest

[[email protected] conf.d]# logstash -f /etc/logstash/conf.d/groksample.conf

技术分享图片


自定义grok模式

grok的模式是基于正则表达式编写,其元字符与其它用到正则表达式的工具awk/sed/grep/pcre差别不大。


自定义nginx日志模式:

# 文件末尾加入解析nginx日志的模型
[[email protected] ~]# vim /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-0.3.0/patterns/grok-patterns
#nginx
NGUSERNAME [a-zA-Z.@-+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:clientip} - %{NOTSPACE:remote_user} [%{HTTPDATE:timestamp}] "(?:%{WORD:verb} %{NOTSPACE:request}
(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:referrer} %{QS:agent} 
%{NOTSPACE:http_x_forwarded_for}


#----
# 在node4上安装一个nginx,并产生一些访问日志
yum -y install nginx
systemctl start nginx

浏览器访问一下,生成日志:http://192.168.3.114/


#----
[[email protected] conf.d]# cat nginxsample.conf 
input {
  file {
    path => ["/var/log/nginx/access.log"]
    type => "nginxlog"
    start_position => "beginning"
  }
}

filter {
  grok {
    match => { "message" => "%{NGINXACCESS}" }  #这里直接引用变量即可
  }
}

output {
  stdout {
    codec => rubydebug
  }
}


检查&启动:

[[email protected] conf.d]# logstash -f /etc/logstash/conf.d/nginxsample.conf –configtest

可见nginx的日志已经解析出来了:

技术分享图片


(3)output

stdout


elasticsearch


让收集的nginx日志进入redis:

node4安装redis:

[[email protected] ~]# yum -y install redis
/etc/redis.conf 设置:bind 0.0.0.0
[[email protected] ~]# systemctl start redis.service


logstash配置文件:

cd /etc/logstash/conf.d 
[[email protected] conf.d]# vim nglogredissample.conf
input {
  file {
    path => ["/var/log/nginx/access.log"]
    type => "nginxlog"
    start_position => "beginning"
  }
}

filter {
  grok {
    match => { "message" => "%{NGINXACCESS}" }
  }
}

output {
  redis {
    port => "6379"  #redis的端口
    host => ["127.0.0.1"]  #redis主机
    data_type => "list"  #数据类型
    key => "logstash-%{type}"  #key
  }
}


#检查&启动

[[email protected] conf.d]# logstash -f ./nglogredissample.conf --configtest

[[email protected] conf.d]# logstash -f ./nglogredissample.conf   #此时刷几下nginx的页面,日志就进入redis中了

技术分享图片

ELK之logstash

原文:https://www.cnblogs.com/weiyiming007/p/12764662.html


推荐阅读
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • Spark与HBase结合处理大规模流量数据结构设计
    本文将详细介绍如何利用Spark和HBase进行大规模流量数据的分析与处理,包括数据结构的设计和优化方法。 ... [详细]
  • Ext JS MVC系列一:环境搭建与框架概览
    本文主要介绍了如何在项目中使用Ext JS 4作为前端框架,并详细讲解了Ext JS 4的MVC开发模式。文章将从项目目录结构、相关CSS和JS文件的引用以及MVC框架的整体认识三个方面进行总结。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • ECharts 官方提供了丰富的图表示例,但实际项目中往往需要从后端动态获取数据。本文将详细介绍如何从后端获取数据并将其转换为 ECharts 所需的 JSON 格式,以实现动态饼图的展示。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 触发器的稳态数量分析及其应用价值
    本文对数据库中的SQL触发器进行了稳态数量的详细分析,探讨了其在实际应用中的重要价值。通过研究触发器在不同场景下的表现,揭示了其在数据完整性和业务逻辑自动化方面的关键作用。此外,还介绍了如何在Ubuntu 22.04环境下配置和使用触发器,以及在Tomcat和SQLite等平台上的具体实现方法。 ... [详细]
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 利用源链接技术调试ASP.NET Core源代码的方法与实践
    本文详细探讨了通过源链接技术调试ASP.NET Core源代码的实用方法,旨在为开发者提供高效、准确的调试技巧,适用于学习和实际工作中遇到的相关问题。希望读者能从中获得有价值的参考和启发。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
author-avatar
手机用户40405729304
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有