日志分析系统ELK!

Posted handsomeboy-东

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日志分析系统ELK!相关的知识,希望对你有一定的参考价值。

ELK

ELK基础知识

概述:ELK是一种开源的实时日志分析系统,它能通过日志分析来帮助发现问题,解决系统故障,它由ElasticSearch(ES)、Logstash和Kibana组成

ELK组成

  • ES:对logstash格式化的数据进行索引和存储
  • logstash:收集日志、过滤、格式化,传输到ES上(如果是高并发则可以用filebeat工具来进行日志的收集)
  • Kibana:展示日志分析结果

ELK处理步骤

  • 通过logstash将日志收集,并格式化传输到ES上存储
  • ES对格式化的数据进行索引和存储
  • 通过Kibana来展示使用者观察

Elasticsearch核心知识

  • 接近实时:它有索引标识数据,搜索的过着只有轻微的延迟(通常1秒)
  • 集群:ES具有集群机制,节点通过集群名加入到集群中,同时在集群中的节点会有一个自己的唯一身份标识
  • 索引:这里的索引有点类似于关系型数据库中的库,它由一个拥有积分相似特征的文档的集合,索引名必须小写字母标识
  • 文档:一个文档是一个可被索引的基础信息单元,
  • 类型:在一个索引中,可以定义一种或多种类型,它是索引上的一个逻辑分类或分区,类似于关系型数据库中的表
  • 分片和分片副本:分片是防止数据过大不易存储在单个节点,影响搜索,它提高性能和吞吐量,进行水平分割拓展,增大存储量,分片副本是放在单个分片或节点故障,丢失数据,它增加了冗余性,高可用性,默认情况下,ES每个索引被分片5个主分片和一个副本

部署ELK日志分析系统

设备准备:

  • ES服务器:node1 ,软件,Elasticsearch,Kibana,192.168.118.11
  • ES服务器,node2,软件,Elasticsearch,192.168.118.22
  • Logstash服务器,node3,软件,Logstash,Apache,192.168.118.33

配置ES环境

  • 配置JDK环境
    node1:
[root@node1 opt]# vim /etc/hosts
192.168.118.11 node1
192.168.118.22 node2
[root@node1 opt]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local
[root@node1 opt]# vim /etc/profile			#修改配置文件
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
[root@node1 ~]# source /etc/profile

node2:

[root@node2 opt]# vim /etc/hosts
192.168.118.11 node1
192.168.118.22 node2
[root@node2 opt]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local
[root@node2 opt]# vim /etc/profile			#修改配置文件
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
[root@node2 jdk]# source /etc/profile
  • 部署Elasticsearch(node1和node2节点部署一样,node2改下节点名称即可)
node1:
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm 
[root@node1 opt]# systemctl daemon-reload 				#加载后台进程
[root@node1 opt]# systemctl enable elasticsearch.service 		#开启elasticsearch
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
[root@node1 opt]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# cp elasticsearch.yml elasticsearch.yml.bak		
[root@node1 elasticsearch]# vim elasticsearch.yml			#修改配置文件




[root@node1 elasticsearch]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml		#查看配置结果是否成功
cluster.name: my-elk-cluster
node.name: node1
path.data: /data/elk_data
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
[root@node1 elasticsearch]# mkdir -p /data/elk_data			#创建数据存放目录
[root@node1 elasticsearch]# chown elasticsearch:elasticsearch /data/elk_data/	#给予属主、组
[root@node1 elasticsearch]# ll -d /data/elk_data/
drwxr-xr-x. 2 elasticsearch elasticsearch 6 814 10:55 /data/elk_data/
[root@node1 elasticsearch]# systemctl start elasticsearch.service 
[root@node1 elasticsearch]# netstat -antp | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      81615/java 
  • 在浏览器上查看

  • 查看集群健康状态,两个节点正常运行

  • 查看集群状态信息
  • 安装各种工具,以方便查看浏览器

node1和node2配置一样:

##安装node组件依赖包
[root@node1 opt]# tar xzvf node-v8.2.1.tar.gz 
[root@node1 node-v8.2.1]# yum -y install gcc gcc-c++ make
[root@node1 opt]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure
[root@node1 node-v8.2.1]# make -j3
[root@node1 node-v8.2.1]# make install

##安装phantomjs前端框架
[root@node1 node-v8.2.1]# cd /usr/local/src/			#将软件包下载到此目录然后解压
[root@node1 src]# tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2 
[root@node1 src]# cd phantomjs-2.1.1-linux-x86_64/bin
[root@node1 bin]# cp phantomjs /usr/local/bin

##安装elasticsearch-head
[root@node1 src]# cd /usr/local/src
[root@node1 src]# tar xzvf elasticsearch-head.tar.gz 
[root@node1 src]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install

##修改主配置文件
[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
#在末尾添加
http.cors.enabled: true					#开启跨域访问支持,默认为false
http.cors.allow-origin: "*" 			#跨域访问允许的域名地址
[root@node1 elasticsearch-head]# systemctl restart elasticsearch.service	#重启服务
[root@node1 elasticsearch-head]# netstat -antp | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      128499/java 

##启动elasticsearch-head服务器
[root@node1 elasticsearch-head]# npm run start &			#让head在后台运行
[1] 128588
[root@node1 elasticsearch-head]# netstat -antp | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      128598/grunt
  • 在浏览器上查看

  • 在node1上创建一个索引

[root@node1 elasticsearch-head]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '"user":"zhangsan","mesg":"hello world"'

  "_index" : "index-demo",
  "_type" : "test",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : 
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  ,
  "created" : true

  • 刷新浏览器查看

  • 查看索引信息

部署apache服务器,安装Logstash

[root@appche ~]# yum install -y httpd
[root@appche ~]# systemctl start httpd

##部署Java环境
[root@appche opt]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local
[root@appche opt]# cd /usr/local
[root@appche local]# ls
bin  etc  games  include  jdk1.8.0_91  lib  lib64  libexec  sbin  share  src
[root@appche local]# mv jdk1.8.0_91/ jdk
[root@appche opt]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
[root@appche opt]# cd /opt
[root@appche opt]# rpm -ivh logstash-5.5.1.rpm 
[root@appche opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
[root@appche opt]# cd /usr/local
[root@appche local]# ls
bin  etc  games  include  jdk1.8.0_91  lib  lib64  libexec  sbin  share  src
[root@appche local]# mv jdk1.8.0_91/ jdk
[root@appche opt]# systemctl start logstash.service 
[root@appche opt]# systemctl enable logstash.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.

##输入标准输出
[root@appche ~]# logstash -e 'input  stdin  output  stdout '
…………………………
www.baidu.com 									#输入百度网址
2021-08-14T12:21:46.662Z appche www.baidu.com

##使用rubydebug显示详细输出
[root@appche ~]# logstash -e 'input  stdin  output  stdout codec=>rubydebug '
…………………………
www.baidu.com									#输入百度网站查看

    "@timestamp" => 2021-08-14T12:24:31.885Z,
      "@version" => "1",
          "host" => "appche",
       "message" => "www.baidu.com"



##使用logstash将信息写入ES数据库中
[root@appche ~]# logstash -e 'input  stdin  output  elasticsearch  hosts=>["192.168.118.11:9200"]  '
………………………………
20:28:12.680 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint :port=>9600
www.baidu.com 						#输入内容
www.google.com.cn					#输入内容
  • 刷新浏览器查看会发现有新的logstash信息
  • 在apache上做对接配置,收集系统日志
[root@appche ~]# chmod o+r /var/log/messages
[root@appche ~]# cd /etc/logstash/conf.d/
[root@appche conf.d]# vim system.conf
input 
        file
        path => "/var/log/messages"
        type => "system"
        start_position => "beginning"
            
        
output 
        elasticsearch 
        hosts => ["192.168.118.11:9200"]
        index => "system-%+YYYY.MM.dd"
                

        
[root@appche conf.d]# systemctl restart logstash.service 		#重启logstash

  • 查看网页

部署Kibana

  • 这里直接在ES服务器上安装Kibana
[root@node1 opt]# rpm -ivh kibana-5.5.1-x86_64.rpm 
[root@node1 opt]# cd /etc/kibana/
[root@node1 kibana]# cp kibana.yml kibana.yml.bak
[root@node1 kibana]# vim kibana.yml						#修改配置文件



[root@node1 kibana]# systemctl start kibana.service 			#开启Kibana
[root@node1 kibana]# systemctl enable kibana.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.
  • 在浏览器上查看

  • 在Kibana上输入索引查看

以上是关于日志分析系统ELK!的主要内容,如果未能解决你的问题,请参考以下文章

ELK日志分析系统

ELK日志分析系统(实例!!!)

ELK日志分析系统

ELK企业级日志分析系统

ELK日志分析系统(理论+部署)

搭建ELK日志分析平台的详细过程