千家信息网

Logstash语法常用案例解析(一)

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,摘要简述logstash的常用插件,以及简单的使用案例一:基础运行建议使用supervisor来管理ELK中的各个组件,方便同一管理安装 https://www.aolens.cn/?p=809 有讲
千家信息网最后更新 2025年12月01日Logstash语法常用案例解析(一)

摘要

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

一:基础运行

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

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

提供一个常用的配置:

[program:logstash]command=/opt/logstash/bin/logstash -f /opt/logstash/conf/index.confnumprocs=1 ;开几个进程dirrectory=/opt/logstashuser=root ;用户stdout_logfile=/opt/logstash/logs/logstash.logstdout_logfile_maxbytes=1MB ;每个日志大小stdout_logfile_backups=10 ;保留10个日志文件stderr_logfile=/opt/logstash/logs/logstash_err.logstderr_logfile_maxbytes=1MBstderr_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        }} 将源数据写入redisoutput{    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:调用命令执行

插件 数据 文件 常用 区域 日志 输入 配置 单位 多个 字段 字符 字符串 格式 类型 系统 表达式 进程 处理 管理 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 公安局指导消防网络安全 微生物基因组数据库有哪些 海信电视升级服务器连接失败 民警不断增强个人网络安全意识 mysql数据库百度云教程 如何备份电脑上所有数据库 ilm数据库 奉贤区一站式网络技术服务多少钱 网络安全员岗位介绍 网络技术小组名称 幼儿园网络安全事件应急演练总结 网络安全管理员工生日礼物 软件开发属于那些专业 广州网络技术最好的公司 郑大一附院网络安全事件 网络安全工程师入门学什么 天津统一软件开发设施价格优惠 关于网上订餐数据库表设计 德惠新时代网络安全质量服务 网络安全法对个人信息加把锁 数据库营销理论案例及理论分析 福州 led软件开发 普陀区微型软件开发装饰 现代数据库技术大纲 OA数据连接erp数据库 武大网络安全研究生分数线 互联网科技公司的国家政策 歌尔软件开发职位怎么样 数据库设为空字符串而不是0 网络代理服务器安全吗
0