Docker部署ELK 8.8.2(4)-logstash部署和使用

一、logstash pipeline介绍


Logstash的核心是pipeline,包含两个必需的元素,输入(inputs)和输出(outputs),以及一个可选的元素,过滤器(filters)。输入插件使用来自源的数据,过滤器插件根据过滤规则修改数据,输出插件将数据写入目的地。

 

二、logstash容器创建


pull镜像 
docker pull docker.elastic.co/logstash/logstash:8.8.2


创建容器 docker run -itd --name logstash docker.elastic.co/logstash/logstash:8.8.2 

 
创建用于映射容器目录的宿主机目录 
mkdir -p /usr/local/logstash 

拷贝logstash容器文件到宿主机目录 
docker cp logstash:/usr/share/logstash/config /usr/local/logstash/ 
docker cp logstash:/usr/share/logstash/pipeline /usr/local/logstash/ 


删除容器 
docker rm -f logstash

重新创建logstash容器,并映射宿主机目录,映射5044端口接收filebeat日志,映射514端口接收syslog日志 docker run -itd --name logstash -p 5044:5044 -p 514:514 -v /usr/local/logstash/config:/usr/share/logstash/config -v /usr/local/logstash/pipeline:/usr/share/logstash/pipeline docker.elastic.co/logstash/logstash:8.8.2

 

三、接收filebeat日志


进入宿主机映射的logstash目录,目录下有config配置文件目录和pipeline配置文件目录
cd /usr/local/logstash/

 

查看配置文件config目录,重点查看pipelines.yml配置
ll config/
cat config/pipelines.yml
下面配置的意思是,pipeline的配置文件在/usr/share/logstash/pipeline目录
path.config: "/usr/share/logstash/pipeline"

 

由于我们将/usr/share/logstash/pipeline目录映射到了宿主机/usr/local/logstash/pipeline目录,所以我们直接查看宿主机目录
[root@kylin logstash]# ll pipeline/
查看目录下的配置文件,使用5044端口接收beats的日志(可以是各种beat,filebeat、metricbeat、winlogbeat等),使用stdout标准输出显示接收到的日志
[root@kylin logstash]# cat pipeline/logstash.conf 


创建一个nginx容器,用filebeat采集日志发送给logstash
创建nginx容器
[root@kylin ~]# docker run -itd --name nginx -p 80:80 nginx
626c82719d6e59f2647a3c5ac1f6290062f93cf54f3e3bedb53c92ad07e1d1ea
进入容器,确认一下配置文件和日志文件所在目录
[root@kylin ~]# docker exec -it nginx bash
root@626c82719d6e:/# ls /etc/nginx/
conf.d    fastcgi_params    mime.types  modules  nginx.conf  scgi_params  uwsgi_params  
root@626c82719d6e:/# ls /var/log
apt  btmp  dpkg.log  faillog  lastlog  nginx  wtmp
root@626c82719d6e:/# exit
exit
在宿主机创建目录,映射给nginx容器使用
[root@kylin ~]# mkdir /usr/local/nginx
将nginx容器的配置目录和日志模板复制到宿主机
[root@kylin ~]# docker cp nginx:/etc/nginx /usr/local/nginx
Successfully copied 16.9kB to /usr/local/nginx
[root@kylin ~]# docker cp nginx:/var/log /usr/local/nginx
Successfully copied 108kB to /usr/local/nginx
nginx容器对日志目录需要有写入权限,这里加一下权限
[root@kylin ~]# chmod -R 777 /usr/local/nginx/log/
删除容器
[root@kylin ~]# docker rm -f nginx
nginx

 

修改nginx配置文件,指定访问日志存储位置,改到/var/log/access.log,相当于宿主机的/usr/local/nginx/log/access.log
[root@kylin ~]# cd /usr/local/nginx/nginx/
[root@kylin nginx]# vi nginx.conf 
[root@kylin nginx]# cat nginx.conf | grep access.log
    access_log  /var/log/access.log  main;

重新创建nginx容器,映射宿主机目录
[root@kylin ~]# docker run -itd --name nginx -p 80:80 -v /usr/local/nginx/nginx:/etc/nginx -v /usr/local/nginx/log:/var/log nginx

打开浏览器,访问  http://宿主机IP:80

 

进入宿主机日志目录
[root@kylin ~]# cd /usr/local/nginx/log/
[root@kylin log]# ls
access.log  apt  btmp  dpkg.log  faillog  lastlog  nginx  wtmp
可以看到nginx访问日志
[root@kylin log]# cat access.log 
192.168.80.1 - - [06/Jul/2023:04:00:23 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67" "-"

Filebeat配置文件修改如下,output指向logstash容器宿主机映射端口
[root@kylin filebeat]# cat filebeat.yml
filebeat.inputs:
- type: filestream
  paths:
    - /usr/local/nginx/log/access.log*
  fields_under_root: true
  fields:
    logtype: "nginx-access"
  ignore_older: 72h

processors:
  - add_host_metadata: ~
  - drop_fields:
     fields: ["host.hostname", "host.os", "host.architecture", "host.id", "host.mac", "host.containerized", "agent", "ecs", "input"]

output.logstash:
  hosts: ["192.168.80.50:5044"]


在后台运行filebeat
nohup ./filebeat -e -c filebeat.yml &
pgrep filebeat    可以查看到filebeat的进程ID,说明filebeat在正常运行

  
logstash容器的默认配置是标准输出stdout,因此使用docker logs可以查看到标准输出中filebeat发送过来的日志
docker logs -n 100 logstash

 

四、接收syslog日志


进入logstash配置目录
[root@kylin ~]# cd /usr/local/logstash/config
备份pipeline配置文件
[root@kylin config]# cp pipelines.yml pipelines.yml.bak
编辑pipeline配置文件,删除所有内容,然后指定syslog和filebeat的配置文件目录
[root@kylin config]# vi pipelines.yml
[root@kylin config]# cat pipelines.yml
- pipeline.id: syslog 
  path.config: "/usr/share/logstash/pipeline/syslog/*.conf"
- pipeline.id: filebeat
  path.config: "/usr/share/logstash/pipeline/filebeat/*.conf"


进入pipeline配置文件目录
[root@kylin config]# cd /usr/local/logstash/pipeline/
[root@kylin pipeline]# ls
logstash.conf
创建syslog和filebeat目录
[root@kylin pipeline]# mkdir syslog filebeat
将默认pipeline配置文件分别拷贝给syslog、filebeat使用
[root@kylin pipeline]# cp logstash.conf syslog/
[root@kylin pipeline]# cp logstash.conf filebeat/
删除/usr/local/logstash/pipeline/目录默认pipeline
[root@kylin pipeline]# rm logstash.conf 
rm:是否删除普通文件 'logstash.conf'?y

  

进入syslog目录
[root@kylin pipeline]# cd syslog/
重命名pipeline文件,以便于从文件名就可以知道这是syslog的pipeline配置
[root@kylin syslog]# mv logstash.conf logstash-syslog.conf

4.1 input:tcp方式接收日志


logstash支持多种input,我们使用其中的tcp接收syslog日志
将logstash-syslog.conf pipeline配置中input部分修改为TCP 514端口接收,
[root@kylin syslog]# vi logstash-syslog.conf 
[root@kylin syslog]# cat logstash-syslog.conf 
input {
  tcp {
    port => 514
    type => syslog
  }
}

output {
  stdout {
    codec => rubydebug
  }
}


重启logstash,使刚刚修改的pipeline生效
[root@kylin ~]# docker restart logstash

 

给宿主机安装rsyslog软件包
[root@kylin ~]# yum install -y rsyslog

配置rsyslog,使用TCP协议,将所有级别日志发送到logstash 514端口(2个@是TCP协议发送,1个@是UDP协议发送,这里logstash使用容器部署,映射的是TCP端口,因此配置为TCP协议发送)
[root@kylin ~]# vi /etc/rsyslog.conf 
在配置文件结尾添加一行,*.*    @@192.168.80.50:514


[root@kylin ~]# tail -n 1 /etc/rsyslog.conf
*.*    @@192.168.80.50:514


重启rsyslog服务
[root@kylin ~]# systemctl restart rsyslog


添加用户的操作会产生日志,我们手动触发一条日志的生成
[root@kylin ~]# useradd test


查看日志输出,可以看到syslog日志
[root@kylin ~]# docker logs -n 100 logstash


 

4.2 input:syslog方式接收日志


我们也可以使用logstash支持的syslog input接收syslog日志
[root@kylin ~]# vi /usr/local/logstash/pipeline/syslog/logstash-syslog.conf
[root@kylin ~]# cat /usr/local/logstash/pipeline/syslog/logstash-syslog.conf 
input {
  syslog {
    port => 514
  }
}

 

output {
  stdout {
    codec => rubydebug
  }
}


重启logstash,使刚刚修改的pipeline生效
[root@kylin ~]# docker restart logstash


再触发一些日志
[root@kylin ~]# userdel -r test
[root@kylin ~]# useradd  test


查看logstash日志输出,可以看到syslog日志
[root@kylin ~]# docker logs -n 100 logstash


相比TCP接收,syslog直接将收到的原始日志(original)做了处理,从中提取出了name(audit日志)、pid(进程pid)等信息,并且添加了日志的级别(Notice)等字段

 

五、日志发送给elasticsearch


进入pipeline配置目录
[root@kylin ~]# cd /usr/local/logstash/pipeline/

修改syslog pipeline的output,输出到elasticsearch
ssl_verification_mode     elasticsearch使用https协议,这里忽略SSL的验证,否则需要配置证书等信息
index => "logstash-syslog-%{+YYYY.MM.dd}"    生成索引,以logstash-syslog-开头,后面是变量,即每天的日志,例如今天是2023年7月6日,生成的索引名为logstash-syslog-2023.07.06

[root@kylin pipeline]# vi syslog/logstash-syslog.conf
[root@kylin pipeline]# cat syslog/logstash-syslog.conf
input {
  syslog {
    port => 514
  }
}

output {
    elasticsearch {
        hosts => ["https://192.168.80.50:9200"]
        index => "logstash-syslog-%{+YYYY.MM.dd}"
        user => "elastic"
        password => "123456"
        ssl_verification_mode => none
    }
}



登录Kibana-点击Management

 

 

点击索引管理,可以看到logstash的output输出到elasticsearch创建的索引


kibana页面,Management(不用点击Management)下面有个开发工具

  
左侧输入API请求,点击发送请求按钮,右侧可以看到所有的索引和索引内的数据
GET /_search


也可以直接访问指定索引的数据,例如访问logstash生成的filebeat 7月6号的索引
GET /logstash-filebeat-2023.07.06/_search

 

 
同理,访问syslog的索引
GET /logstash-syslog-2023.07.06/_search

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值