ELK中Logstash的基本配置和用法

文章目录

《Elasticsearch搜索引擎系统入门》中简单描述了Logstah的安装,本篇文章将较为详细的讲解Logstash的基本配置和用法。

Logstash的条件判断

比较操作符

复制代码
相等: ==, !=, <, >, <=, >=
正则: =~(匹配正则), !~(不匹配正则)
包含: in(包含), not in(不包含)

布尔操作符

复制代码
and(与), or(或), nand(非与), xor(非或)

一元运算符:

复制代码
!(取反)
()(复合表达式), !()(对复合表达式结果取反)

Logstash的输入插件

Stdin输入

Stdin输入就是把输入的内容直接输出到控制台,不做存储。配置示例:

json 复制代码
input {
	stdin {
	}
}
filter {
}
output {
	stdout {
		codec => rubydebug
	}
}

进入 logstash的安装目录:

bash 复制代码
mkdir config/input_config/
cd config/input_config/
vim Stdin.conf #然后写入上面的配置内容

再次回到logstash的安装目录:

bash 复制代码
sudo chmod -R 777 data/
# 使用刚才的配置文件启动
./bin/logstash -r -f ./config/input_config/Stdin.conf

启动后,在控制台输入内容就可以收集到:

文件内容输入

配置示例:

json 复制代码
input {
	file {
		path => "/home/rx/tmp/test.log"
		tags => "123"
		type => "syslog"
	}
}
filter {
}
output {
	stdout {
		codec => rubydebug
	}
}

path里面支持日志路径的通配符,比如:/tmp/log*/*.log

将上面的内容保存到 logstash目录下面的 config/input_config/File.conf

然后启动:./bin/logstash -r -f ./config/input_config/File.conf

接下来,给 /home/rx/tmp/test.log 里面写入内容,查看logstash控制台:

filter过滤器

配置示例:

json 复制代码
input {
	stdin {
	}
}
filter {
	json {
		source => "message"
		target => "content"
	}
}
output {
	stdout {
		codec => rubydebug
	}
}

以上内容 filter 中的 source表示对 message 部分进行解析,target 表示目标字段,可以将 message里面的内容解析出来后放到 content 中。

保存上面配置文件到 Stdin_filter.conf 中,然后运行:./bin/logstash -r -f ./config/input_config/Stdin_filter.conf

在控制台输入一个json,示例:{"ip":"127.0.0.1","method":"POST","url":"/user/info?id=1"}

可以看到 json的内容被解析到了 content 里面,而message 里面是原始的json字符串内容。

Logstash的输出插件

可以支持很多输出方式,在 https://www.elastic.co/guide/en/logstash/current/output-plugins.html 查看:

在这里介绍输出到ES的操作步骤。

测试收集日志

下面测试对系统日志/var/log/syslog/var/log/auth.log 进行收集,配置logstash如下的配置文件:
vim /home/rx/soft/elastic/logstash-7.1.0/config/output_config/logstash-to-es.conf 写入内容:

json 复制代码
input {
    file {
        path => ["/var/log/syslog"]
        type => "system"
        tags => ["syslog","test"]
        start_position => "beginning"
    }
    file {
        path => ["/var/log/auth.log"]
        type => "system"
        tags => ["auth","test"]
        start_position => "beginning"
    }
}
filter {
}
output {
    if [type] == "system" {
        if [tags][0] == "syslog" {
            elasticsearch {
                hosts  => ["http://192.168.0.211:9200","http://192.168.0.212:9200","http://192.168.0.213:9200"]
                index  => "logstash-system-syslog-%{+YYYY.MM.dd}"
            }
            stdout { codec=> rubydebug }
        }
        else if [tags][0] == "auth" {
            elasticsearch {
                hosts  => ["http://192.168.0.211:9200","http://192.168.0.212:9200","http://192.168.0.213:9200"]
                index  => "logstash-system-auth-%{+YYYY.MM.dd}"
            }
            stdout { codec=> rubydebug }
        }
    }
}
  • 以上配置的hosts部分使用了集群配置,如果是单个ES服务,直接使用单个IP和端口即可,例如:hosts => "http://127.0.0.1:9200"
  • start_position => "beginning" 表示从文件头部开始收集

启动 logstash:./logstash-7.1.0/bin/logstash -r -f ./logstash-7.1.0/config/output_config/logstash-to-es.conf

启动后就开始收集日志了:

启动kibana

修改 kibana/config/kibana.yml 里面关于ES的内容:

复制代码
elasticsearch.hosts: ["http://localhost:9200"]

然后启动ES 和 kibana:

复制代码
./elasticsearch-7.1.0/bin/elasticsearch #启动ES
./kibana-7.1.0-linux-x86_64/bin/kibana #启动kibana

浏览器访问 http://localhost:5601/ 打开kibana的页面,进入 Management > Index management 即可看到最新收集到的日志索引:

在kibana中配置索引数据

进入 kibana 管理页面的 Management > Index Patterns > Create index pattern:

下一步:

创建完成:

然后在 Discover 中就可以看到最新收集的日志了:

相关推荐
sunoo-229几秒前
【Linux 系统编程】学习第七天:线程属性 | 互斥锁 | 死锁 | 信号量 核心知识点 + 踩坑实战
linux·c语言·笔记·vscode·学习
Zkaisen5 分钟前
【Gitee】SSH 公钥、GPG 公钥、私人令牌的区别
运维·gitee·ssh
Elasticsearch8 分钟前
从建议到修复的 4 个阶段:使用 Elastic Workflows 实现人在回路中的自动化
elasticsearch
小雪崩11 分钟前
嵌入式学习 day33:线程进阶
linux·c语言·学习
HXSYS15 分钟前
无人机库房管理标准化,《无人机装调维修师》规范存储运维
运维·无人机
牢姐与蒯21 分钟前
Linux进程(四).进程优先级以及进程切换,进程调度
linux·运维·服务器·ubuntu
大爱编程♡30 分钟前
Linux C 语言文件 IO 与构建工具实战指南
linux·服务器
yyuuuzz1 小时前
企业出海云服务器部署踩坑记录:从频繁超时到稳定运行的复盘
运维·服务器·网络·人工智能·aws
科技研学社1 小时前
服装后道自动化选型|五大品牌全自动激光开袋机深度对比分析报告
运维·自动化
中电金信1 小时前
源启DevOps平台落地实践:从40分钟到3分钟,构建部署提效13倍
运维·devops