[TOC]
## logstash模块组成
Logstash由三个组件构造成,分别是input、filter以及output。三个组件的工作流为:
| 组件 | 功能 |
| --- | --- |
| input | 收集数据 |
| filter | 处理数据 |
| output | 输出数据 |
filter过滤器插件非必须,但filter插件才能体现logtash的强大。
~~~yml
input{
输入插件
}
filter{
过滤器插件
}
outer{
输出插件
}
~~~
add\_field、remove\_field、add\_tag、remove\_tag 是所有 Logstash 插件都有。相关使用方法看字段名就可以知道。
### 常用启动参数
|参数 |说明 |举例|
| --- | --- | --- |
|-e |用命令行里的配置参数启动实例 |./bin/logstash -e ‘input {stdin {}} output {stdout {}}’|
|-f |指定启动实例的配置文件 |./bin/logstash -f config/test.conf|
|-t |测试配置文件的正确性 |./bin/logstash-f config/test.conf -t|
|-l |指定日志文件名称 |./bin/logstash-f config/test.conf -l logs/test.log|
|-w |指定filter线程数量(5) |./bin/logstash-f config/test.conf -w 8|
### 数据类型
| 类型 | 示例 |
| --- | --- |
| bool | debug => true |
| bytes | my\_bytes => "113" # 113 bytes |
| string | host => "hostname" |
| number | port => 214 |
| array | match =>\[ "/var/log/messages", "/var/log/\*.log" \] |
| hash | options => {key1 => "value1",key2 => "value2" } |
### 条件判断
logshash支持if...else的条件判断,支持下面的操作符:
等性:==, !=, <, >, <=, >=
正则:=~, !~
包含:in, not in
布尔:and, or, nand, xor
取反:!
## input模块
`input`[插件官方详解:](https://www.elastic.co/guide/en/logstash/current/input-plugins.html)
### input是怎么样接收日志的
logstash使用一个名为filewatch的ruby gem库来监听文件变化,读取进度记录到一个叫.sincedb的数据库文件中。
这个文件的默认路径在`plugins/inputs/file`下面。
### 从file-stdin-beat-redis读取示例
logstash的input模块可以从各种输入类型获取数据,如文件(file),日志(log),数据库(mysql,reids)等,各个输入类型涉及的内部关键字不一样,下面以常用的几个输入类型讲解
**从文件`file`输入**
~~~
input{
file{
path => ["/var/log/messages"]
}
}
#其他选项
path 必须的选项,文件路径,可以多个,中括号包围
exclude 排除不想被监听的文件
close_older 已经监听的文件多久未更新就关闭监听(3600秒 1小时)
ignore_older 检查文件列表时,若有文件的最后修改时间超过(84600秒 一天)就忽略
discover_interval 多久去查一次被监听的path下是否有新文件(15秒)
sincedb_path 自定义 sincedb 文件到其他位置。
sincedb_write_interval 每隔多久写一次 sincedb 文件(15秒)
stat_interval 被监听文件的检查频率(1秒)
start_position 从什么位置开始读取文件数据,值"end(默认)/beginning"
~~~
**标准输入`stdin{}`**
```sh
input{
stdin{
type => "stdin"
}
}
```
**filebeat输入**
~~~
input {
beats {
hosts => "10.0.0.11"
port => "5044"
}
}
~~~
**redis输入**
~~~
input {
redis {
data_type => "list"
key => "filebeat-1011"
host => "10.0.0.11"
port => 6379
password => 'abcd1234e'
db => "2"
threads => 5
codec => "json"
}
}
~~~
### input通用参数
下列6个参数,是所有input插件都支持的参数
```sh
codec 输入编解码器,在数据输入之前解码数据(line)
add_field 向输入数据中添加一个K/V字段
enable_metric 禁用或启用日志记录
id 设置stdin的ID,不设置随机生成,多个时stdin有用
tags 给数据数据添加标签,方便后续处理
type 向此输入的数据添加一个字段,主要用于过滤器
```
`codec`参数,在input/output中都有,接下来专门讲解
## CODEC编码插件
编码插件(codec)可以在logstash输入或输出时处理不同类型的数据,同时,还可以更好更方便的与其他自定义格式的数据产品共存,比如:fluent、netflow、collectd等通用数据格式的其他产品。
因此,logstash不只是一个input-->filter-->output的数据流,而且是一个input-->decode-->filter-->encode-->output的数据流。
常用的codec插件有plain,json,multiline等
### **plain插件:**
plain是最简单的编码插件,你输入什么信息,就返回什么信息
~~~sh
input {
stdin {
codec => plain {}
}
}
~~~
### **json插件:**
有时候logstash采集的日志是JSON格式,那我们可以在input字段加入codec => json来进行解析,这样就可以根据具体内容生成字段,方便分析和储存。
如果想让logstash输出为json格式,可以在output字段加入codec=>json。
如果数据为json格式,可直接使用该插件,从而省掉filter/grok的配置,降低过滤器的cpu消耗
~~~sh
input {
stdin {
codec => json
}
}
~~~
### **multiline插件:**
用于合并多行数据
java类程序,一条有用的数据可能输出在很多行,分析日志时得把这些日志按一行处理,multiline插件用于解决此类问题。
例:tomcat的日志catalina.out有很多调试的日志,日志都以时间戳格式"20-Apr-2016 11:29:28.535"开头,那么我们可以配置如下:
~~~sh
input {
file{
path => "xxx/tomcat/ogs/catalina.out"
tags => ["api-core"]
codec => multiline {
pattern => "^\d{2}\:\d{2}\:\d{2}\.\d{3}"
auto_flush_interval => 10
negate => true
what => "previous"
}
stat_interval => "1"
}
}
~~~
pattern 为正则表达式匹配
negate true表示不匹配正则表达式。默认false
what 如果匹配,事件属于previous(上一个)或者next(下一个)事件
auto_flush_interval 多少秒没有新数据,之前积累的多行数据转换为一个事件
>以上的配置解释:不匹配pattern时间戳格式开头的行,都归属到上一个事件中,等待10秒没有新数据产生,那么最后一个时间戳格式后的所有行数据就是最后一个事件。
## output模块
[output官方插件地址:](https://www.elastic.co/guide/en/logstash/6.8/output-plugins.html)
Logstash的output模块,相比于input模块来说是一个输出模块,output模块集成了大量的输出插件,可以输出到指定文件,也可输出到指定的网络端口,当然也可以输出数据到ES.
### output通用参数
| 参数名 | 参数说明 |
| --- | --- |
| workers | 设置输出线程数量 |
| codec | 输出编解码器,对输出的数据编码(line) |
| enable_metric | 禁用或启用日志记录|
### 输出到标准输出(stdout)
标准输出默认使用`rubydebug`,还可以使用`json`
~~~bash
#使用rubydebug
output {
stdout {
codec => rubydebug
}
}
#使用json
output {
stdout { codec => json }
}
~~~
### 输出到redis
```sh
output {
redis{
codec => plain
data_type => list
db => 3
host => ["10.0.0.11:6379"]
key => xxx
password => xxx
port => 6379
timeout => 5
}
}
```
### 输出到Elasticsearch
到es的输出参数有很多,但重要的就是hosts和index,其他参数可以参考官方文档:
[es参数](https://www.elastic.co/guide/en/logstash/6.8/plugins-outputs-elasticsearch.html)
```sh
output {
elasticsearch {
hosts => ["10.0.0.12:9200"]
index => logstash-%{+YYYY.MM.dd}
}
}
```
### 增加条件的判断的output
在logstash进行output时,可以根据type和tag值不同,做不同的条件判断,输出不同的数据,如:
```sh
output{
if "api-01" in [tags] {
elasticsearch {
hosts => ["10.0.0.12:9200"]
index => "pro-api-01-%{+YYYY.MM.dd}"
}
}
if "api-02" in [tags] {
elasticsearch{
hosts => ["10.0.0.12:9200"]
index => "pro-api-02-%{+YYYY.MM.dd}"
}
}
}
```
- shell编程
- 变量1-规范-环境变量-普通变量
- 变量2-位置-状态-特殊变量
- 变量3-变量子串
- 变量4-变量赋值三种方法
- 变量5-数组相关
- 计算1-数值计算命令和案例
- 计算2-expr命令举例
- 计算3-条件表达式和各种操作符
- 计算4-条件表达式和操作符案例
- 循环1-函数的概念与作用
- 循环2-if与case语法
- 循环3-while语法
- 循环4-for循环
- 其他1-判断传入的参数为0或整数的多种思路
- 其他2-while+read按行读取文件
- 其他3-给输出内容加颜色
- 其他4-shell脚本后台运行知识
- 其他5-6种产生随机数的方法
- 其他6-break,continue,exit,return区别
- if语法案例
- case语法案例
- 函数语法案例
- WEB服务软件
- nginx相关
- 01-简介与对比
- 02-日志说明
- 03-配置文件和虚拟主机
- 04-location模块和访问控制
- 05-status状态模块
- 06-rewrite重写模块
- 07-负载均衡和反向代理
- 08-反向代理监控虚拟IP地址
- nginx与https自签发证书
- php-nginx-mysql联动
- Nginx编译安装[1.12.2]
- 案例
- 不同客户端显示不同信息
- 上传和访问资源池分离
- 配置文件
- nginx转发解决跨域问题
- 反向代理典型配置
- php相关
- C6编译安装php.5.5.32
- C7编译php5
- C6/7yum安装PHP指定版本
- tomcxat相关
- 01-jkd与tomcat部署
- 02-目录-日志-配置文件介绍
- 03-tomcat配置文件详解
- 04-tomcat多实例和集群
- 05-tomcat监控和调优
- 06-Tomcat安全管理规范
- show-busy-java-threads脚本
- LVS与keepalived
- keepalived
- keepalived介绍和部署
- keepalived脑裂控制
- keepalived与nginx联动-监控
- keepalived与nginx联动-双主
- LVS负载均衡
- 01-LVS相关概念
- 02-LVS部署实践-ipvsadm
- 03-LVS+keepalived部署实践
- 04-LVS的一些问题和思路
- mysql数据库
- 配置和脚本
- 5.6基础my.cnf
- 5.7基础my.cnf
- 多种安装方式
- 详细用法和命令
- 高可用和读写分离
- 优化和压测
- docker与k8s
- docker容器技术
- 1-容器和docker基础知识
- 2-docker软件部署
- 3-docker基础操作命令
- 4-数据的持久化和共享互连
- 5-docker镜像构建
- 6-docker镜像仓库和标签tag
- 7-docker容器的网络通信
- 9-企业级私有仓库harbor
- docker单机编排技术
- 1-docker-compose快速入门
- 2-compose命令和yaml模板
- 3-docker-compose命令
- 4-compose/stack/swarm集群
- 5-命令补全和资源限制
- k8s容器编排工具
- mvn的dockerfile打包插件
- openstack与KVM
- kvm虚拟化
- 1-KVM基础与快速部署
- 2-KVM日常管理命令
- 3-磁盘格式-快照和克隆
- 4-桥接网络-热添加与热迁移
- openstack云平台
- 1-openstack基础知识
- 2-搭建环境准备
- 3-keystone认证服务部署
- 4-glance镜像服务部署
- 5-nova计算服务部署
- 6-neutron网络服务部署
- 7-horizon仪表盘服务部署
- 8-启动openstack实例
- 9-添加计算节点流程
- 10-迁移glance镜像服务
- 11-cinder块存储服务部署
- 12-cinder服务支持NFS存储
- 13-新增一个网络类型
- 14-云主机冷迁移前提设置
- 15-VXALN网络类型配置
- 未分类杂项
- 部署环境准备
- 监控
- https证书
- python3.6编译安装
- 编译安装curl[7.59.0]
- 修改Redhat7默认yum源为阿里云
- 升级glibc至2.17
- rabbitmq安装和启动
- rabbitmq多实例部署[命令方式]
- mysql5.6基础my.cnf
- centos6[upstart]/7[systemd]创建守护进程
- Java启动参数详解
- 权限控制方案
- app发包仓库
- 版本发布流程
- elk日志系统
- rsyslog日志统一收集系统
- ELK系统介绍及YUM源
- 快速安装部署ELK
- Filebeat模块讲解
- logstash的in/output模块
- logstash的filter模块
- Elasticsearch相关操作
- ES6.X集群及head插件
- elk收集nginx日志(json格式)
- kibana说明-汉化-安全
- ES安装IK分词器
- zabbix监控
- zabbix自动注册模板实现监控项自动注册
- hadoop大数据集群
- hadoop部署
- https证书
- certbot网站
- jenkins与CI/CD
- 01-Jenkins部署和初始化
- 02-Jenkins三种插件安装方式
- 03-Jenkins目录说明和备份
- 04-git与gitlab项目准备
- 05-构建自由风格项目和相关知识
- 06-构建html静态网页项目
- 07-gitlab自动触发项目构建
- 08-pipelinel流水线构建项目
- 09-用maven构建java项目
- iptables
- 01-知识概念
- 02-常规命令实战
- 03-企业应用模板
- 04-企业应用模板[1键脚本]
- 05-企业案例-共享上网和端口映射
- SSH与VPN
- 常用VPN
- VPN概念和常用软件
- VPN之PPTP部署[6.x][7.x]
- 使用docker部署softether vpn
- softEther-vpn静态路由表推送
- SSH服务
- SSH介绍和部署
- SSH批量分发脚本
- 开启sftp日志并限制sftp访问目录
- sftp账号权限分离-开发平台
- ssh配置文件最佳实践
- git-github-gitlab
- git安装部署
- git详细用法
- github使用说明
- gitlab部署和使用
- 缓存数据库
- zookeeper草稿
- mongodb数据库系列
- mongodb基本使用
- mongodb常用命令
- MongoDB配置文件详解
- mongodb用户认证管理
- mongodb备份与恢复
- mongodb复制集群
- mongodb分片集群
- docker部署mongodb
- memcached
- memcached基本概念
- memcached部署[6.x][7.x]
- memcached参数和命令
- memcached状态和监控
- 会话共享和集群-优化-持久化
- memcached客户端-web端
- PHP测试代码
- redis
- 1安装和使用
- 2持久化-事务-锁
- 3数据类型和发布订阅
- 4主从复制和高可用
- 5redis集群
- 6工具-安全-pythonl连接
- redis配置文件详解
- 磁盘管理和存储
- Glusterfs分布式存储
- GlusterFS 4.1 版本选择和部署
- Glusterfs常用命令整理
- GlusterFS 4.1 深入使用
- NFS文件存储
- NFS操作和部署
- NFS文件系统-挂载和优化
- sersync与inotify
- rsync同步服务
- rsyncd.conf
- rsync操作和部署文档
- rsync常见错误处理
- inotify+sersync同步服务
- inotify安装部署
- inotify最佳脚本
- sersync安装部署
- 时间服务ntp和chrony
- 时间服务器部署
- 修改utc时间为cst时间
- 批量操作与自动化
- cobbler与kickstart
- KS+COBBLER文件
- cobbler部署[7.x]
- kickstart部署[7.x]
- kickstar-KS文件和语法解析
- kickstart-PXE配置文件解析
- 自动化之ansible
- ansible部署和实践
- ansible剧本编写规范
- 配置文件示例
- 内网DNS服务
- 压力测试
- 压测工具-qpefr测试带宽和延时