ELK学习

一、ELK介绍

1.ELK是什么?

ELK是三个开源软件的缩写
E: elasticsearch    java    收集、分析、存储数据
L:logstash            java    收集、分析、过滤日志文件数据
K: kibana            java    提供web页面

F:filebeat            go        负责收集日志文件

2.ELK经常用来做什么

1.收集:收集所有的日志数据
2.传输:能稳定的把所有的日志数据传输到ES
3.存储:ES能有效快速的存储日志数据
4.分析:可以通过web页面将数据展示分析
5.警告:提供错误报告,监控

3.ELK优点

1.处理方式灵活:elasticsearch是实时全文索引,具有强大的搜索功能
2.配置相对简单:elasticsearch全部使用JSON 接口,logstash使用模块配置,kibana的配置文件部分更简单。
3.检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。
4.集群线性扩展:elasticsearch和logstash都可以灵活线性扩展
5.前端操作绚丽:kibana的前端设计比较绚丽,而且操作简单

4.日志收集、分析需求

#收集:
1.web服务日志(nginx、tomcat)
2.系统日志

#分析:
1.统计来源IP数量
2.统计访问次数最多排名前十的用户地址
3.站点被访问次数最多的URL
4.查询一上午 以上三个数据 的量
5.查询一下午 以上三个数据 的量
6.对比上午和下午的数据,对比昨天和今天的数据

二、ELK搭建

1.ES搭建

2.logstash搭建

1)安装java环境

#上传java包
[root@m01 ~]# rz jdk-8u181-linux-x64.rpm

#安装java
[root@m01 ~]# yum localinstall -y jdk-8u181-linux-x64.rpm

#验证java环境
[root@redis01 ~]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

2)时间同步

[root@m01 ~]# ntpdate time1.aliyun.com

3)安装logstash

#上传包
[root@m01 ~]# rz logstash-6.6.0.rpm

#安装
[root@m01 ~]# yum localinstall -y logstash-6.6.0.rpm

#授权
[root@m01 ~]# chown -R logstash.logstash /usr/share/logstash/

#启动程序
[root@m01 ~]# /usr/share/logstash/bin/logstash

3.logstash介绍

1)Logstash输入输出插件介绍

INPUT插件:使Logstash能够读取特定的事件源。
OUTPUT插件:将事件数据发送到特定的目的地,OUTPUT是事件流水线中的最后阶段。
INPUT支持事件源 OUTPUT支持输出源 CODEC编解码器支持编码
azure_event_hubs(微软云事件中心) elasticsearch(搜索引擎数据库) avro(数据序列化)
beats(filebeat日志收集工具) email(邮件) CEF(嵌入式框架)
elasticsearch(搜索引擎数据库) file(文件) es_bulk(ES中的bulk api)
file(文件) http(超文本传输协议) Json(数据序列化、格式化)
generator(生成器) kafka(基于java的消息队列) Json_lines(便于存储结构化)
heartbeat(高可用软件) rabbitmq(消息队列 OpenStack) line(行)
http_poller(http api) redis(缓存、消息队列、NoSQL) multiline(多行匹配)
jdbc(java连接数据库的驱动) s3*(存储) plain(纯文本,事件间无间隔)
kafka(基于java的消息队列) stdout(标准输出) rubydebug(ruby语法格式)
rabbitmq(消息队列 OpenStack) tcp(传输控制协议)
redis(缓存、消息队列、NoSQL) udp(用户数据报协议)
s3*(存储)
stdin(标准输入)
syslog(系统日志)
tcp(传输控制协议)
udp(用户数据报协议)

2)Logstash输入输出插件测试

#测试标准输入到标准输出
[root@m01 ~]# /usr/share/logstash/bin/logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug }}'
#手动输入123
123
{
#版本信息
      "@version" => "1",
#主机名
          "host" => "m01",
#输入的内容
       "message" => "123",
#时间戳
    "@timestamp" => 2020-05-20T02:15:35.798Z
}

3)Logstash标准输入到文件

#从标准输入到文件
[root@m01 ~]# /usr/share/logstash/bin/logstash -e 'input { stdin{} } output { file { path => "/tmp/test_%{+YYYY.MM.dd}.log" }}'

#输入test output file
test output file
#返回结果
[INFO ] 2020-05-20 10:36:49.164 [[main]>worker0] file - Opening file {:path=>"/tmp/test_2020.05.141.log"}

#到输出的目录下验证
[root@m01 ~]# ll /tmp/test_2020.05.141.log 
-rw-r--r-- 1 root root 360 May 20 10:41 /tmp/test_2020.05.141.log
[root@m01 ~]# tail -f /tmp/test_2020.05.141.log
{"host":"m01","@timestamp":"2020-05-20T02:36:48.382Z","message":"","@version":"1"}
{"host":"m01","@timestamp":"2020-05-20T02:38:29.233Z","message":"test output file","@version":"1"}
{"host":"m01","@timestamp":"2020-05-20T02:39:19.797Z","message":"test2","@version":"1"}

4)Logstash标准输入到ES

[root@m01 ~]# /usr/share/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["10.0.0.91:9200"] index => "test_%{+YYYY-MM-dd}" } }'

#输入内容
test output es

#到es数据目录中查看
[root@redis01 ~]# ll /server/es/data/nodes/0/indices/
total 0
drwxr-xr-x 4 elasticsearch elasticsearch 29 May 20 08:30 amwRy5GTSzuhYxO8umPaIg
drwxr-xr-x 6 elasticsearch elasticsearch 47 May 20 10:52 AOn5lNnJRwGKVROOWbs1cA

#到ES页面查看

QQ截图20200520105657.png

4.部署kibana

1)安装java

2)安装kibana

3)kibana页面

1> 时间区域

时间区域.png

2> 日志列表区域

日志列表区域.png

3>搜索区域

搜索区域.png

4> 数据展示区

数据展示区.png

三、Logstash使用

不难理解,我们的日志通常都是在日志文件中存储的,所以,当我们在使用INPUT插件时,收集日志,需要使用file模块,从文件中读取日志的内容,那么接下来讲解的是,将日志内容输出到另一个文件中,如此一来,我们可以将日志文件统一目录,方便查找。

注意:Logstash与其他服务不同,收集日志的配置文件需要我们根据实际情况自己去写。
前提:需要Logstash对被收集的日志文件有读的,并且对要写入的文件,有写入的权限。

1.logstash配置文件

#默认读取配置文件
[root@m01 ~]# vim /etc/logstash/logstash.yml

#一般情况我们配置包含配置文件
[root@m01 ~]# vim /etc/logstash/logstash.yml
path.config: /etc/logstash/conf.d
#以后所有的配置文件都写到conf.d下面

2.配置logstash收集文件中的日志到文件

1)配置logstash

[root@m01 ~]# vim /etc/logstash/conf.d/message.conf
input {
  file {
    type => "message-log"
    path => "/var/log/messages"
    start_position => "beginning"
  }
}
output {
  file {
    path => "/tmp/message_%{+YYYY.MM.dd}.log"
  }
}

2)启动logstash

#检测语法
[root@m01 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf -t
Configuration OK
Validation Result: OK

#启动
[root@m01 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf &

3)测试日志收集

#监控收集的日志
[root@m01 ~]# tail -f /tmp/message_2020.05.20.log

#添加一条数据到message日志
[root@m01 ~]# echo 11111111 >> /var/log/messages

3.配置logstash收集文件中的日志到ES

1)配置logstash

[root@m01 ~]# vim /etc/logstash/conf.d/message.conf
input {
  file {
    type => "nginx-log"
    path => "/var/log/nginx/access.log"
    start_position => "beginning"
  }
}
output {
  elasticsearch {
   hsots => ["ip地址"] index => "索引名称如:nginx_log"
  }
}

2)启动

[root@m01 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test_es.conf &
Copyright © 高程程 all right reserved,powered by Gitbook修订于: 2021-05-18 21:14:52

results matching ""

    No results matching ""