ELK(二)

上次es集群已经搭建完毕,这次我们使用logstash进行日志的收集并传输到es集群中,通过kibana进行可视化。

安装logstash+kibana

本次系统为Ubuntu18.04 logstash版本7.12.1 
在此提醒ES、logstash、kibana三个版本最好一直,否则有些功能并不兼容
下载安装包
wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/apt/pool/main/l/logstash/logstash-7.12.1-amd64.deb
安装
dpkg -i logstash-7.12.1-amd64.deb

考虑到本次收集日志文件会有权限问题,我们把启动用户设置为ROOT,也可以自己给需要收集的日志添加响应的权限。

下载kibana包
wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/apt/pool/main/k/kibana/kibana-7.12.1-amd64.deb

安装
dpkg -i kibana-7.12.1-amd64.deb

修改kibana配置文件
root@es1:~# grep -v ^# /etc/kibana/kibana.yml 
server.port: 5601
server.host: "0.0.0.0" 
elasticsearch.hosts: ["http://10.0.0.121:9200"]   #连接es集群地址
i18n.locale: "zh-CN"    #支持中文

启动kibana
systemctl start kibana

本次收集日志分为几个简单的场景

场景一

收集系统日志
查看所需要收集的日志
root@logstash1:/etc/logstash/conf.d# ll /var/log/syslog 
-rw-r----- 1 syslog adm 1658751 Sep 25 20:17 /var/log/syslog
编写logstash配置文件/etc/logstash/conf.d下
root@logstash1:/etc/logstash/conf.d# cat syslog.conf 
input {
  file {                               #输入的方式
    path => "/var/log/syslog"     #指定收集日志的路径
    start_position => "beginning"  #“end”默认采集文件位置为logstash启动时间节点,“beginning”为从syslog日志第一条开始收集,
    stat_interval => 3        #日志收集间隔时间
  }
}
output {
  elasticsearch {        #输出至es中
   hosts => ["10.0.0.121:9200"]         #指定输出es地址与端口
   index => "lhl-syslog-%{+YYYY.MM.dd}"   #日志输出到lhl-syslog-%{+YYYY.MM.dd}索引中。索引为自动创建
  }
}

启动logstash服务
root@logstash1:/etc/logstash/conf.d# systemctl restart logstash.service 

通过命令检查配置文件是否正常

root@logstash1:/etc/logstash/conf.d# /usr/share/logstash/bin/logstash -f syslog.conf -t
检查配置文件正常

在Elasticsearch-Head插件中查看

索引以创建

通过kibana进可视化

创建索引模式

通过模糊匹配来匹配对于的索引名称

模糊配置对应的索引
添加时间筛选

可以根据字段来过滤关键信息

可视化查询

场景二

收集Nginx access.log error.log
root@web2:/etc/logstash/conf.d#  cat lhl-nginx.conf 
input {
  file{
   path => "/opt/logs/access.log"  #指定收集日志的路径
   start_position => "beginning"   #“end”默认采集文件位置为logstash启动时间节点,“beginning”为从syslog日志第一条开始收集
   stat_interval => 3          #日志收集间隔时间
   type => "nginx-accesslog"   #事件的唯一类型,可以理解为给access.log文件打上一个标签
 }
  file{
   path => "/opt/logs/error.log"
   start_position => "beginning"
   stat_interval => 3
   type => "nginx-errorlog"
}
}

output {
  if [type] == "nginx-accesslog" {     #判断type标签是否匹配nginx-accesslog
  elasticsearch {
   hosts => ["10.0.0.120:9200"]
   index => "lhl-nginx-access-%{+YYY.MM.dd}"
 }}
  if [type] == "nginx-errorlog" {  #判断type标签是否匹配为nginx-errorlog
  elasticsearch {
   hosts => ["10.0.0.121:9200"]
   index => "lhl-nginx-error-%{+YYYY.MM.dd}"
 }}
}

启动logstash服务
systemctl start logstash

查看索引是否生成

Nginx索引生成

在kibana添加索引进行可视化

error索引日志可视化

error可视化

access索引日志可视化

access日志可视化

注意事件

logstash::input::file不支持path=>"/path/to/%{+yyyy/mm/dd/hh}.log"写法

path=>"/path/to/*/*/*.log"  或者path=>"/path/to/**/*.log"     //**递归所有子目录

添加注意事件会更新