往期回顾:
云端技术驾驭DAY01——云计算底层技术奥秘、云服务器磁盘技术、虚拟化管理、公有云概述
云端技术驾驭DAY02——华为云管理、云主机管理、跳板机配置、制作私有镜像模板
云端技术驾驭DAY03——云主机网站部署、web集群部署、Elasticsearch安装
日志分析系统ELK
主机名 | IP | 配置 |
---|
logstash | 192.168.1.27 | 4vCPUs 8GiB内存 |
- 项目架构图
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/93f7679aed1b40009e0a75670de822d8.png)
Logstash概述及安装
Logstash概述
- 什么是Logstash
– 是一个数据采集、加工处理以及传输的工具 - Logstash特点
– 所有类型的数据集中处理
– 不同模式和格式数据的正常化
– 自定义日志格式的迅速扩展
– 为自定义数据源轻松添加插件 - Logstash结构原理
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/8a544dad305342fc97ee1e80a6ce125d.png)
结构 | 解释 |
---|
input | 负责收集数据 |
filter | 负责处理数据 |
output | 负责输出数据 |
- Logstash支持的数据类型
– 布尔、字节、字符串、数值、数组、键值对 - Logstash支持的判断方法
判断方法 | 解释 |
---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
=~ | 正则匹配 |
!~ | 判断一个字符串是否不匹配给定的正则表达式 |
- Logstash支持的逻辑判断
– in、notin、and、or、nand、xor
安装Logstash
- Logstash安装需要注意什么?
– Logstash没有默认配置文件,需要手动配置
– Logstash安装位置在/usr/share/logstash目录
– Logstash配置文件安装在/etc/logstash目录下,由于程序找不到配置文件路径,需要在/usr/share/logstash目录下创建一个名为config的/etc/logstash的软连接 - 安装部署
[root@logstash ~]# vim /etc/hosts
... ...
192.168.1.21 es-0001
192.168.1.22 es-0002
192.168.1.23 es-0003
192.168.1.24 es-0004
192.168.1.25 es-0005
192.168.1.27 logstash
[root@logstash ~]# dnf -y install logstash
[root@logstash ~]# ln -s /etc/logstash /usr/share/logstash/config
Logstash配置管理
配置文件管理
[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {
stdin {}
}
filter{
}
output{
stdout{}
}
[root@logstash ~]# /usr/share/logstash/bin/logstash // 启动logstash,logstash会占用终端,可以输入数据
[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {
stdin { codec => "json" }
}
filter{
}
output{
stdout{ codec => "rubydebug" }
}
[root@logstash ~]# /usr/share/logstash/bin/logstash
... ...
{"a":"1", "b":"2", "c":"3"} // 输入
// 输出内容
{
"a" => "1",
"@timestamp" => 2024-02-16T12:21:47.330Z,
"@version" => "1",
"host" => "logstash",
"c" => "3",
"b" => "2"
}
插件管理
- 使用插件
– Logstash对数据的处理依赖插件,上面的配置文件使用了logstash-input-stdin和logstash-output-stdout两个插件 - 管理命令 /usr/share/logstash/bin/logstash-plugin
命令 | 解释 |
---|
list | 查看插件 |
install | 安装插件 |
uninstall | 删除插件 |
Input模块
- file插件
– file插件是应用最广泛的插件之一,主要用途是从本地文件中获取数据,并实时监控文件的变化 - file插件语法格式
input {
file { 参数 => "参数值" }
}
[root@logstash ~]# touch /tmp/{a,b}.log
[root@logstash ~]# echo 'string 01' >>/tmp/a.log
[root@logstash ~]# echo 'string 02' >>/tmp/a.log
[root@logstash ~]# echo 'string 03' >>/tmp/a.log
[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {
file {
path => ["/tmp/a.log", "/tmp/b.log"]
}
}
filter{
}
output{
stdout{ codec => "rubydebug" }
}
// 启动程序,等待数据输出
[root@logstash ~]# /usr/share/logstash/bin/logstash
// 在另一个终端模拟写入日志
[root@logstash ~]# echo 'string 04' >>/tmp/b.log
[root@logstash ~]# echo 'string 05' >>/tmp/a.log
// 删除默认书签文件
[root@logstash ~]# rm -rf /var/lib/logstash/plugins/inputs/file/.sincedb_*
[root@logstash ~]# cat /tmp/{a.log,b.log} >/tmp/c.log
[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {
file{
path => ["/tmp/c.log"] // 指定需要监控的文件路径
start_position => "beginning" // 第一次读取文件位置【begining|end】
sincedb_path => "/var/lib/logstash/sincedb" // 记录读取文件的位置,以便在重启Logstash时可以从上次停止的地方继续读取
}
}
filter{
}
output{
stdout{ codec => "rubydebug" }
}
[root@logstash ~]# /usr/share/logstash/bin/logstash
Filter模块
- grok插件
– 解析各种非结构化的日志数据插件
– grok使用正则表达式把非结构化的数据结构化再分组匹配
- 准备测试数据
// 从 web 服务器查找一条日志写入到日志文件
[root@logstash ~]# echo '60.26.217.109 - admin [13/Jan/2023:14:31:52 +0800] "GET /es/ HTTP/1.1" 200 148209 "http://127.70.79.1/es/" "curl/7.61.1"' >/tmp/c.log
// 调试技巧:设置路径为 /dev/null 可以多次反复测试
[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {
file {
path => ["/tmp/c.log"]
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
// filter { 不做任何修改 }
// output { 不做任何修改 }
[root@logstash ~]# /usr/share/logstash/bin/logstash
- 匹配IP地址测试
[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
// input { 不做任何修改 }
filter {
grok {
match => { "message" => "(?<userIP>((25[0-5]|2[0-4]\d|1?\d?\d)\.){3}(25[0-5]|2[0-4]\d|1?\d?\d))" }
}
grok {
match => { "message" => "%{IP:clientIP}" }
}
}
// output { 不做任何修改 }
[root@logstash ~]# /usr/share/logstash/bin/logstash
- 使用宏格式化日志
[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
// input { 不做任何修改 }
filter{
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
remove_field => ["message"]
}
}
// output { 不做任何修改 }
[root@logstash ~]# /usr/share/logstash/bin/logstash
Output模块
[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
# input { 不做任何修改 }
# filter { 不做任何修改 }
output{
stdout{ codec => "rubydebug" }
elasticsearch {
hosts => ["es-0002:9200","es-0003:9200"] // elasticsearch节点的地址
index => "weblog-%{+YYYY.MM.dd}" // 存储数据索引的名称,按日期生成索引
}
}
[root@logstash ~]# /usr/share/logstash/bin/logstash // 看到终端有数据可以读取出来
- 通过head插件查询验证
– 浏览器访问DAY03配置的elasticsearch页面,验证数据写入 Elasticsearch 成功