logstash语法常用案例解析

author author     2022-09-01     351

关键词:

摘要

简述logstash的常用插件,以及简单的使用案例

一:基础运行

建议使用supervisor来管理ELK中的各个组件,方便同一管理

安装 https://www.aolens.cn/?p=809      有讲解

提供一个常用的配置:

[program:logstash]
command=/opt/logstash/bin/logstash -f /opt/logstash/conf/index.conf
numprocs=1 ;开几个进程
dirrectory=/opt/logstash
user=root ;用户
stdout_logfile=/opt/logstash/logs/logstash.log
stdout_logfile_maxbytes=1MB ;每个日志大小
stdout_logfile_backups=10 ;保留10个日志文件
stderr_logfile=/opt/logstash/logs/logstash_err.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10

运行参数:

技术分享

启动logstash服务(常用supervisor守护进程)

./bin/logstash -f /etc/logstash/conf.d/*  -t             #检查配置文件是否ok

./bin/logstash -f  conf.d/nginx.conf -w 5 -l /var/log/logstash/

 

二:配置语法

1,区域:(section)

Logstash用{}来定义区域。可以在区域中定义多个插件区域,插件区域内可以定义键值对

eg:

input {             # 输入数据
       file {
        path=["/var/log/messages","/var/log/*.log"]
          type="system"
          start_position="beginning"
       }
    }
filter{      # 数据过滤处理
    if[type]=="system"{
    grok{
        match=["message",%{COMBINEDAPACHELOG}]
    }
    }
}
output{      # 数据处理输出
  stdout{
    codec=rubydebug
  }
}

2,数据类型:

    string——普通字符串

            name => "Hello world"

            name => ‘It‘s a beautiful day‘

    array——数组可以是单个或者多个字符串值。

            path => [ "/var/log/messages", "/var/log/*.log" ]

            path => "/data/mysql/mysql.log"

    hash——键值对,注意多个键值对用空格分隔,而不是逗号。

            match => {

                "field1" => "value1"

                "field2" => "value2"

            ... }

    Codec——用来表示数据编码。用于input和output段。便于数据的处理。

            codec => "json"

    number——必须是有效的数值,浮点数或者整数。

            port => 33

    boolean——布尔值必须是TRUE或者false。

            ssl_enable => true

    bytes——指定字节单位。默认是byte。

            my_bytes => "1113" # 1113 bytes

            my_bytes => "10MiB" # 10485760 bytes

            my_bytes => "100kib" # 102400 bytes  Binary (Ki,Mi,Gi,Ti,Pi,Ei,Zi,Yi) 单位1024

            my_bytes => "180 mb" # 180000000 bytes  SI (k,M,G,T,P,E,Z,Y) 单位基于1000

    password——一个单独的字符串。

            my_password => "password"

    path——代表有效的操作系统路径。

            my_path => "/tmp/logstash"

    3:字段引用

    Logstash配置中要使用字段的值,只需要把字段的名字写在中括号[]里。只要是input输入的值,都可以引用

    eg:

            [geoip][location][-1]

    4,条件判断

    表达式支持的操作符

            ==(等于),!=(不等),<(小于),>(大于),<=(小等),>=(大等)

            =~(匹配正则),!~(不匹配正则)

            in(包含),not in(不包含)

            and(与),or(或),nand(与非),xor(非或)

            ()(复合表达式),!()(取反复合表达式结果)


    三:常用插件

    1,插件管理

            ./bin/plugin -h

            install

            uninstall

            update

            list

            eg:

            bin/plugin install logstash-output-webhdfs

            bin/plugin update logstash-input-tcp

     

    2,常用插件 input,output,filter,codec

    2.1 Input插件

            stdin:标准输入,常用于测试,

input {
    stdin {
        type = "string"
        tags = ["add"]
        codec="plain"
    }
}

            file:从文件系统中读取文件,类似linux下的tail -f。 最常用

input {
    file {
        path = ["/var/log/*.log","/var/log/message"]     # logstash只支持文件的绝对路径
        type = "system"       # type记录文件类型,定义的变量为全局变量,其他插件都可以调用
        start_position = "beginning"
    }
}

            redis:从redis服务器读取,同时使用redis channel和redis list。

input{
    redis{    
        data_type="list"    
        key="logstash-nginx"    
        host="192.168.1.250"    
        port=6379    
        db=1    
        threads=5
        }} 将源数据写入redis
output{
    redis{    
        host="192.168.1.250"
        port=6379    
        db=1    
        data_type="list"    
        key="logstash-nginx"
        }}

            TCP/UDP: 输入

#nc127.0.0.18888 /var/log/nginx/access.json       # 可以是json文件直接传值
 
#echo‘{"name":"liuziping","age":"18"}‘ |nc127.0.0.18888
 
input {
    tcp {
        port = 8888               # 定义tcp监听端口
        codec="json"               # 规定传入的数据为json格式,k/v结构方便分析
        mode = "server"
    }
}

技术分享

        syslog:监听在514端口的系统日志信息,并解析成RFC3164格式。

input {
    syslog {
        port = "514"
    }
}

技术分享

        beats: 通过Filebeat发送事件。

2.2:Output 插件

        stdout:标准输出

output {
    stdout {
        codec = rubydebug
        workers = 2
    }
}

        file :保存成文件

output {
    file {
        path = "/path/to/%{+yyyy/MM/dd/HH}/%{host}.log.gz"
        message_format = "%{message}"
        gzip = true
    }
}

elasticsearch:保存进elasticsearch ,也是最为重要的

output {
    elasticsearch {
        hosts => ["192.168.0.2:9200"]      # 或者cluster => “ClusterName“
        index => "logstash-%{type}-%{+YYYY.MM.dd}"     #索引名,统一格式,方便kibana导入,会讲统一类型的日志,全部导入 这里的type=input中的type值
        document_type => "nginx"
        workers => 1                          #启动一个进程
        flush_size => 20000              # 攒够20000 条数据一次性发给ES,默认500条
        idle_flush_time => 10          # 如果10s内没攒够 20000 条也发一次给ES,默认1s
        template_overwrite => true
    }
}

        redis:保存到redis中在input插件中已讲解

        TCP:输出TCP

output { 
    tcp {
     host = "192.168.0.2"
      port = 8888
      codec = json_lines
      } 
    }

        Email:发送邮件

技术分享

        exec:调用命令执行

技术分享

本文出自 “aolens·程超” 博客,请务必保留此出处http://aolens.blog.51cto.com/7021142/1929463

logstash常用filter插件介绍(代码片段)

Filter是Logstash功能强大的主要原因,它可以对LogstashEvent进行丰富的处理,比如说解析数据、删除字段、类型转换等等,常见的有如下几个:date:日志解析grok:正则匹配解析dissect:分割符解析mutate:对字段做处理,比如重命名、... 查看详情

iptables常用语法与案例

常用命令语法:[[email protected]~]#iptables[-ttables][-L][-nv]选项与参数:-t:后面接table,例如nat或filter,若省略此项目,则使用默认的filter-L:列出目前的table的规则-n:不进行IP与HOSTNAME的反查,显示讯息的速度会快很多!-v:列出... 查看详情

快手小铃铛跳转微信如何实现?最常用的方法案例解析

快手小铃铛跳转微信如何实现?最常用的方法案例解析!快手小铃铛跳转微信如何实现?最常用的方法案例解析! 查看详情

linux常用命令总结(语法+案例)建议收藏!(代码片段)

目录vi和vim开机、重启、防火墙相关操作用户管理帮助指令文件目录类时间日期类搜索查找类压缩和解压类组管理和权限管理crond任务调度RPM和YUMvi和vim快捷键使用案例:1)拷贝当前行yy,拷贝当前行向下的5行5yy,并粘贴ÿ... 查看详情

thymeleaf常用语法:模板注释

...引擎解析也不处理,但查看网页源代码,注释有在里面。语法: <!--内容-->浏览器界面不显示,查看浏览器网页源码有显示;2、解析层注释直接通过浏览器打开,会显示。但Thymeleaf模板引擎解析时会移除注释 查看详情

记录logstash的filter使用(代码片段)

概述logstash 之所以强大和流行,与其丰富的过滤器插件是分不开的过滤器提供的并不单单是过滤的功能,还可以对进入过滤器的原始数据进行复杂的逻辑处理,甚至添加独特的新事件到后续流程中 强大的文本解析工具&nbs... 查看详情

shell脚本从入门到实战(代码片段)

...变量系统变量1.常用系统变量2.案例实操自定义变量1.基本语法2.变量定义规则特殊变量:$n特殊变量:$#特殊变量:\\$*、\\$@特殊变量:$?运算符1.基本语法2.案例实操条件判断1.基本语法2.常用判断条件案例实操流... 查看详情

logstash配置语法

Logstash用{}来定义区域input{  stdin{}  syslog{}}数据类型booldebug=>truestringhost=>"hostname"numberport=>514arraymatch=>["datetime","UNIX","666 查看详情

elk学习笔记之logstash基本语法

Logstash基本语法: 处理输入的input处理过滤的filter处理输出的output 区域数据类型条件判断字段引用 区域:Logstash中,是用{}来定义区域区域内,可以定义插件一个区域内可以定义多个插件 数据类型:条件判断:字... 查看详情

logstash配置语法

配置结构以及插件位置输入插件:input{…}过滤插件:filter{…}输出插件:output{…}数据类型-Arrayusers=>[{id=>1,name=>N1},{id=>2,name=>N2}]-listspath=>["/var/log/messages","/var/log/*.log"]uris=>["http://elastic.co" 查看详情

日志监控_elasticstack-0003.logstash输入插件及实际生产案例应用?

...始,插件都独立拆分成gem包,每个插件可独立更新,无需等待Logstash自身整体更新,具体管理命令可参考./bin/logstash-plugin--help帮助信息../bin/logstash-pluginlist其实所有的插件就位于本地./vendor/bundle/jruby/1.9/gems/目录下扩展:如果GitHub上面(http... 查看详情

日志监控_elasticstack-0002.logstash编码插件及实际生产案例应用?

...始,插件都独立拆分成gem包,每个插件可独立更新,无需等待Logstash自身整体更新,具体管理命令可参考./bin/logstash-plugin--help帮助信息../bin/logstash-pluginlist其实所有的插件就位于本地./vendor/bundle/jruby/1.9/gems/目录下扩展:如果GitHub上面(http... 查看详情

logstash安装介绍

前言logstash是ELK日志系统中的一部分,主要承担将收集完成日志进行过滤,并且输出到es的职责。logstash本身也可以作为客户端部署到应用系统的服务器上进行日志收集,但是由于资源开销占用过大,所以客户端的收集工作交给了... 查看详情

logstash_agent.conf语法注意事项

编写配置文件时要注意语法,如新版本的logstash对参数host变更为hosts,去除了port参数等。[[email protected]logstash]#catlogstash_agent.confinput{file{type=>"messages"path=>["/var/log/messages"]}}output{elasticsearch{hosts=> 查看详情

sed常用案例(转自老男孩)

...[[email protected]~]#sed--version#→sed软件版本GNUsedversion4.2.1语法格式sed[options][sed-commands][input-file]sed[选项][sed命令][输入文件]说明:1.注意se 查看详情

logstash解析日志实例

配置Filebeat输出到LogstashLogstash中配置Filebeat输入使用GrokFilter插件解析日志使用Geoip插件丰富数据将数据索引到Elasticsearch多个输入输出插件配置介绍来自为知笔记(Wiz) 查看详情

解析 Nginx 日志时的 Logstash _grokparsefailure

】解析Nginx日志时的Logstash_grokparsefailure【英文标题】:Logstash_grokparsefailurewhenparsingNginxlogs【发布时间】:2017-07-0714:52:10【问题描述】:我正在尝试使用Logstash解析nginx日志,一切看起来都很好,除了使用包含Nginx$remote_user的行获取... 查看详情

ftl指令常用标签及语法(代码片段)

FTL指令常用标签及语法注意:使用freemaker,要求所有标签必须闭合,否则会导致freemaker无法解析。freemaker注释:<#--注释内容-->格式部分,不会输出----------------------------------基础语法----------------------------------1、字符输出$emp.name... 查看详情