logstash简介

举报
tea_year 发表于 2025/07/31 12:52:42 2025/07/31
【摘要】 logstash简介logstash是一个开源的数据采集工具,通过数据源采集数据.然后进行过滤,并自定义格式输出到目的地。数据分为:结构化数据 如:mysql数据库里的表等半结构化数据 如: xml,yaml,json等非结构化数据 如:文档,assets,音频,视频等 logstash可以采集任何格式的数据,当然我们这里主要是讨论采集系统日志,服务日志等日志类型数据。官方产品介绍:http...

logstash简介

logstash是一个开源的数据采集工具,通过数据源采集数据.然后进行过滤,并自定义格式输出到目的地。

数据分为:

  1. 结构化数据 如:mysql数据库里的表等

  2. 半结构化数据 如: xml,yaml,json等

  3. 非结构化数据 如:文档,assets,音频,视频等

logstash可以采集任何格式的数据,当然我们这里主要是讨论采集系统日志,服务日志等日志类型数据。

官方产品介绍:https://www.elastic.co/cn/products/logstash

logstash工作流.png

input插件: 用于导入日志源 (==配置必须==)

https://www.elastic.co/guide/en/logstash/current/input-plugins.html

filter插件: 用于过滤(==不是配置必须的==)

https://www.elastic.co/guide/en/logstash/current/filter-plugins.html

output插件: 用于导出(==配置必须==)

https://www.elastic.co/guide/en/logstash/current/output-plugins.html



logstash部署

在logstash服务器上确认openjdk安装

[root@vm3 ~]# java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)

在logstash服务器上安装logstash

[root@vm3 ~]# wget https://artifacts.elastic.co/downloads/logstash/logstash-7.17.5-x86_64.rpm
[root@vm3 ~]# rpm -ivh logstash-7.17.5-x86_64.rpm

配置logstash主配置文件

#创建一个子配置文件的目录
[root@logstash ~]#mkdir -p /etc/logstash/conf.d
​
​
[root@vm3 ~]# cat /etc/logstash/logstash.yml |grep -v '#' |grep -v '^$'
path.data: /var/lib/logstash
path.config: /etc/logstash/conf.d/                  打开注释,并加上配置目录路径
path.logs: /var/log/logstash
​
http.host: "10.1.1.13"                              # 打开注释,并改为本机IP(这是用于xpack监控用,但要收费,所以在这里不配置也可以)
​

启动测试

[root@vm3 ~]# cd /usr/share/logstash/bin
使用下面的空输入和空输出启动测试一下
[root@vm3 bin]# ./logstash -e 'input {stdin {}} output {stdout {}}'
运行后,输入字符将被stdout做为标准输出内容输出

logstash.png

关闭启动

测试能启动成功后,ctrl+c取消,则关闭了

#启动
[root@logstash ~]#systemctl start logstash.service 
[root@logstash ~]#systemctl status logstash.service 


image-20250708153139469.png

另一种验证方法:

#上述测试还可以使用如下方法进行:
[root@vm3]# vim /etc/logstash/conf.d/test.conf
​
input {
        stdin {
        }
}
​
filter {
}
​
output {
        stdout {
                codec => rubydebug          #省略, => 
        }
}
​
​
[root@vm3 bin]# pwd
/usr/share/logstash/bin
​
[root@vm3 bin]# ./logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/test.conf -t
......
Config Validation Result: OK. Exiting Logstash
​
--path.settings 指定logstash主配置文件目录
-f 指定片段配置文件
-t 测试配置文件是否正确
codec => rubydebug这句可写可不定,默认就是这种输出方式
#测试了配置文件是正确的,是不是要测试一下,采集--》数据清洗【没有写代码】--》输出
#stdin -->filter(空)-->stdou
#-r参数很强大,会动态装载配置文件,也就是说启动后,可以不用重启修改配置文件
​
​
[root@vm3 bin]# ./logstash --path.settings /etc/logstash -r -f /etc/logstash/conf.d/test.conf
......此处省略提示1万行....
The stdin plugin is now waiting for input:
​
haha    #stdin
{       #下面一堆事stdout
    "@timestamp" => 2019-07-02T10:40:10.839Z,
       "message" => "haha",
          "host" => "vm3.cluster.com",
      "@version" => "1"
}
hehe
{
    "@timestamp" => 2019-07-02T10:40:11.794Z,
       "message" => "hehe",
          "host" => "vm3.cluster.com",
      "@version" => "1"
}
#退出:CTRL+D/C
​



日志采集

采集messages日志

这里以/var/log/messages为例,只定义input输入和output输出,不考虑过滤

[root@vm3 bin]# vim /etc/logstash/conf.d/test.conf
input {
    file {
        path => "/var/log/messages"
        start_position => "beginning"
    }
}
​
output {
    elasticsearch{
        hosts => ["es02:9200"]
        index => "test-%{+YYYY.MM.dd}"
    }
}
​
​
[root@vm3 bin]# ./logstash --path.settings /etc/logstash/ -r -f /etc/logstash/conf.d/test.conf  &
​
后台运行如果要杀掉,请使用pkill java或ps查看PID再kill -9清除

通过浏览器访问es-head验证

logstash2.png

logstash3.png

项目实践:

1, 在logstash那台服务器上做一些操作(比如,重启下sshd服务), 让/var/log/message有新的日志信息,然后验证es-head里的数据。

结果: 会自动更新, 浏览器刷新就能在es-head上看到更新的数据。

2, kill掉logstash进程(相当于关闭), 也做一些操作让/var/log/message日志有更新,然后再次启动logstash。

结果: 会自动连上es集群, es-head里也能查看到数据的更新。



采集多日志源

[root@vm3 bin]# vim /etc/logstash/conf.d/test.conf
​
input {
        file {
                path => "/var/log/messages"
                start_position => "beginning"
                type => "messages"
        }
​
        file {
                path => "/var/log/yum.log"
                start_position => "beginning"
                type => "yum"
        }
}
​
filter {
​
}
​
output {
        if [type] == "messages" {
        elasticsearch {
                hosts => ["es02:9200","es01:9200"]
                index => "messages-%{+YYYY-MM-dd}"
                }
        }
​
        if [type] == "yum" {
        elasticsearch {
                hosts => ["es02:9200","es01:9200"]
                index => "yum-%{+YYYY-MM-dd}"
                }
        }
}

#作业:

nigix php zabbix

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。