企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] # 运行参数 ![](https://box.kancloud.cn/f39ef9a6a9b68cd595117f6f58fed16c_803x462.png) # 配置语法 * 处理输入的input * 处理过滤的filter * 处理输出的output 完整的配置语句 ![](https://box.kancloud.cn/e3b52c0f2e9f803890ea26d5bd48ffda_795x525.png) **语法格式** * 区域 * 数据类型(布尔值,字符串,数值,数组,哈希) * 条件判断 * 字段引用 **区域** * logstash中,是用{}来定义区域的 * 区域内,我们可以定义插件 * 一个区域内是定义多个插件 **数据类型** ![](https://box.kancloud.cn/4bd1d86ac9417d14130f931c7e4ab9e5_620x436.png) **条件判断** ![](https://box.kancloud.cn/e6468da94ce98230c51bb73791921291_757x98.png) ![](https://box.kancloud.cn/94dd5483c61ab413e7d3acc2608c2d82_514x164.png) **字段引用** logstash还支持变量内插,在字符串里使用字段引用的方法是这样的 ![](https://box.kancloud.cn/ba5abd59c1755dc198e9ffc00fa81934_517x150.png) # logstash插件 * inputs 就是输入 * codecs就是解码 * filters就是过滤 * outputs输出 插件获取地址 https://github.com/logstash-plugins 在线安装 `./plugin install logstash-input-jdbc` 升级插件 `./plugin update logstash-input-jdbc` 卸载插件 `./plugin uninstall logstash-input-jdbc` 淘宝源地址 https://ruby.taobao.org 替换源: 安装gem包,`yum install -y gem` 然后`gem sources --remove http://ruby.taobao.org/` 最好运行下`gem sources -l` 看下源地址 先切换下源在安装插件 列出插件列表 ~~~ ./plugin list ~~~ # inputs输入配置 * Stdin标准输入 * File文件输入 * TCP/UDP输入 * Rsyslog输入 ## File文件输入 ![](https://box.kancloud.cn/2ed115fc624af0fa2670c21fbef1eb9f_1144x435.png) 路径要写绝对路径,不要写相对路径 例子,读取elasticsearch.log ![](https://box.kancloud.cn/a8b439b56cc3b4f2969d9421ffd59fa0_723x390.png) 可以读取多个日志用`*`做通配符 ![](https://box.kancloud.cn/5f04f6d836eb933f90ea3b1cdc2083c6_789x382.png) 也可以定义多个file ![](https://box.kancloud.cn/5ea91b623bc3bd7fb548e8f71ee21e0e_727x413.png) ![](https://box.kancloud.cn/86faa54971f1d035f0df9920d94075b0_489x159.png) 这个参数是,比如你测试日志,他读到100行,你把日志删了,他不会从头读,加上这个可以从头读取 ## TCP输入 ![](https://box.kancloud.cn/85befdea8bb994aaafa8998e7dff44bd_672x469.png) 例子 ![](https://box.kancloud.cn/ddc957511c8aabb3848d16ae49b46783_671x389.png) 我们来测试下 在bin下写个文件tcp.conf ~~~ input { tcp { port => 9999 mode => "server" ssl_enable=>false } } output { stdout {} } ~~~ 然后我们运行 ~~~ ./logstash -f tcp.conf ~~~ 再开个窗口运行 ~~~ # 后面是个文件 nc 127.0.0.1 9999 < original-ks.cfg ~~~ ## UDP输入 ![](https://box.kancloud.cn/92bbdb5353fc75232bda9eb0b1bbb472_1098x313.png) 例子 ![](https://box.kancloud.cn/ba51e6e00ef83a694524ee816ef05c14_255x344.png) ## syslog输入 rsyslog是一个syslog的多线程加强版 从centos6开始,syslog由rsyslog替代 ~~~ /etc/rsyslog.conf service rsyslog restart ~~~ ![](https://box.kancloud.cn/716679d549e363537356f3c3e239c44c_558x345.png) # codec编码配置 codec:解码编码 json,msgpack,edn... logstash处理流程 ~~~ input-->decode-->filter-->encode-->output ~~~ ## plain编码 plain是一个空的解析器,他可以让用户自己指定格式 例子 ![](https://box.kancloud.cn/99bb82c48428c2b4e773ec04bed3a477_265x356.png) 把这个写到文件中然后运行 ~~~ ./logstash -f plain.conf ~~~ 然后你输出什么他就显示什么 ## json编码 如果事件格式是json的话,直接 `codec=>json` 例子1: ~~~ input{ stdin{ } } output{ stdout{ codec=>json } } ~~~ 例子2: 如果你的json文件比较长,需要换行那么就用到json_lines的编码方式 ~~~ input{ tcp{ port=>12388 host=>"127.0.0.1" codec=>json_lines{ } } } output{ stdout{} } ~~~ 不用json_line他会有反斜杠转义 ## rubydebug 将采用RubyAwsonePrint库来解析日志 输出格式 ![](https://box.kancloud.cn/da0614370ca1f3ddaafcd7691d2e6413_611x215.png) 例子: ~~~ input{ stdin{ codec=>json } } output{ stdout{ codec=>rubydebug } } ~~~ ## multiline多行事件编码 有时候有的日志会用很多行去展现,这么多行其实都是一个事件 比如java的异常日志 ![](https://box.kancloud.cn/0c3cb4890d333766ee39726f0aeaafff_1184x471.png) 例子 一段日志 ![](https://box.kancloud.cn/17b3dbddc5092917b708cdbafe68b19b_1290x130.png) ![](https://box.kancloud.cn/81205341d6ed1021875dcc94c39327f0_276x385.png) ![](https://box.kancloud.cn/2587df0624bdca5008fcf290e6d43e94_1247x318.png) # filter过滤配置 * Json filter * Grok filter * KV filter ## Json filter 数据格式是json,那么可以通过它把数据解析成你想要的数据结构 **设置参数** ![](https://box.kancloud.cn/b0fdcfe50af921e2e6f903ce90325342_607x327.png) source就是来源数据,target表示解析目标字段 例子: ![](https://box.kancloud.cn/b1324c13a14b2c4bf7ad874e806b644c_274x385.png) ![](https://box.kancloud.cn/d30d7170a6b4d4806ddac350548c316b_976x562.png) 如果多了target就会把结果放到target指定的下面 ## Grok filter grok是目前logstash里面最好的一种解析各种非结构化的日志数据的工具 原因是里面有很多定义好的patterns ![](https://box.kancloud.cn/985f49524cb450a46d94110ff4187afe_1115x129.png) **设置参数** ![](https://box.kancloud.cn/7105eed6ec9af77a90f218518f92c5ab_609x495.png) 例子 日志 ![](https://box.kancloud.cn/eb2e5e7bc0a6335e1c93c238e7369572_1096x248.png) -- 配置 ![](https://box.kancloud.cn/1746e4f0a6b7e4e4a5948f87a38e5e1c_1100x467.png) -- **patterns_dir** 路径要写绝对路径不能写相对路径 ![](https://box.kancloud.cn/730c1159393d904efbbd0a46ce461070_1093x367.png) **多匹配规则定义** 如果日志 ![](https://box.kancloud.cn/36fe6781f6c2ab7c2044f6e698ce1e66_1096x346.png) 可以在这个网址上测试`https://grokdebug.herokuapp.com` 可以检验你的pattern写的是不是正确 ## KV filter 解析处理key-value这种键值对数据 ![](https://box.kancloud.cn/50217dd3eaf5b5fc0ada04bea88afb82_1189x90.png) 例子 ![](https://box.kancloud.cn/34111371dd750bb6fa359fcd79b568ec_252x406.png) # output 如何让数据经过logstash的解析和处理后,把结果输出出来 * 输出到file * 以tcp/udp方式输出 * 输出到elasticsearch ## 输出到file 把解析过滤的结果,输出到file文件里 比如放到一个txt文件里 例子1 ![](https://box.kancloud.cn/b57df39cf6c3467001101dbb2fe7aac2_522x348.png) 还可以定义输出的文件是被压缩的,message指定输出的字段 ![](https://box.kancloud.cn/653537d1bee09fa4111c3f4ee9197d97_760x314.png) ## tcp/udp方式输出 tcp ![](https://box.kancloud.cn/2f8d142c5fa50294a8e15694bf3abff2_371x340.png) udp ![](https://box.kancloud.cn/524a4f349995040181d85f45ef174ba7_344x293.png) ## 输出到elasticsearch elasticsearch就是数据库 把logstash解析过滤的结果输入到elasticsearch里 方可存储以及检索 ![](https://box.kancloud.cn/cbcf72d40057ae38e1e6a65e75493182_858x343.png) 这边host一般写主节点,你也可以把集群名字写进去 index是索引名称,type是在input里面定义的,引用这个字段 也可以让logstash的结果输出到redis中