[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中
- SQL
- 名词
- mysql
- 初识mysql
- 备份和恢复
- 存储引擎
- 数据表损坏和修复
- mysql工具
- 数据库操作
- 增
- 删
- 改
- 查
- 数据类型
- 整数类型
- 小数类型
- 日期时间类型
- 字符和文本型
- enum类型
- set类型
- 时间类型
- null与not null和null与空值''的区别
- 数据表操作
- 创建
- 索引
- 约束
- 表选项列表
- 表的其他语句
- 视图
- sql增删改查
- sql增
- sql删
- sql改
- sql查
- sql语句练习
- 连接查询和更新
- 常用sql语句集锦
- 函数
- 字符函数
- 数值运算符
- 比较运算符与函数
- 日期时间函数
- 信息函数
- 聚合函数
- 加密函数
- null函数
- 用户权限管理
- 用户管理
- 权限管理
- pdo
- 与pdo相关的几个类
- 连接数据库
- 使用
- pdo的错误处理
- pdo结果集对象
- pdo结果集对象常用方法
- pdo预处理
- 常用属性
- mysql编程
- 事务
- 语句块
- mysql中的变量
- 存储函数
- 存储过程
- 触发器
- mysql优化
- 存储引擎
- 字段类型
- 三范式和逆范式
- 索引
- 查询缓存
- limit分页优化
- 分区
- 介绍
- 分区算法
- list分区
- range范围
- Hash哈希
- key键值
- 分区管理
- 特别注意
- 分表
- 数据碎片与维护
- innodb表压缩
- 慢查询
- explain执行计划
- count和max,groupby优化
- 子查询优化
- mysql锁机制
- 介绍
- 演示
- 总结
- 乐观锁和悲观锁
- 扛得住的mysql
- 实例和故事
- 系统参数优化
- mysql体系结构
- mysql基准测试
- 索引
- mysql的复制
- win配置MySQL主从
- mysql5.7新特性
- 常见问题
- general log
- 忘记密码
- uodo log与redo log
- 事务隔离级别
- mysql8密码登录
- explain
- 高效的Tree表
- on delete cascade 总结
- mongod
- 简介
- 集合文档操作语句
- 增删改查
- 索引
- 数据导入和导出
- 主从复制
- php7操作mongod
- 权限管理
- redis
- redis简介
- 3.2版本配置文件
- 3.0版本配置文件
- 2.8版本配置文件
- 配置文件总结
- 外网连接
- 持久化
- RDB备份方式保存数据
- AOF备份方式保存数据
- 总结
- win安装redis和sentinel部署
- 事务
- Sentinel模式配置
- 分布式锁
- 管道
- php中redis代码
- 发布订阅
- slowlog
- Redis4.0
- scan和keys
- elasticsearch
- 配置说明
- 启动
- kibana
- kibana下载
- kibana配置文件
- kibana常用功能
- 常用术语
- Beats
- Beats简介
- Filebeat
- Packetbeat
- Logstash
- 配置
- elasticsearch架构
- es1.7
- head和bigdesk插件
- 插件大全
- 倒排索引
- 单模式下API增删改查
- mget获取多个文档
- 批量操作bulk
- 版本控制
- Mapping映射
- 基本查询
- Filter过滤
- 组合查询
- es配置文件
- es集群优化和管理
- logstash
- kibana
- es5.2
- 安装
- 冲突处理
- 数据备份
- 缺陷不足
- 集群管理api
- 分布式事务
- CAP理论
- BASE模型
- 两阶段提交(2PC)
- TCC (Try-Confirm-Cancle)
- 异步确保型
- 最大努力通知型
- 总结