第七十二集 日志分析系统 (☞゚ヮ゚)☞ ELK ‍


简介

顾名思义ELK是由Elasticsearch Logstash Kibana三大组件构成的一个基于web页面的日志分析工具。

日志分析是运维工程师解决系统故障,发现问题的主要手段。日志包含多种类型,包括程序日志,系统日志以及安全日志等。通过对日志分析,预发故障的发生,又可以在故障发生时,寻找到蛛丝马迹,快速定位故障点。及时解决。

组件结构

Elasticsearch:是一个开源分布式时实分析搜索引擎,建立在全文搜索引擎库Apache Lucene基础上,同时隐藏了Apache Lucene的复杂性。Elasticsearch将所有的功能打包成一个独立的动画片,索引副本机制,RESTful风格接口,多数据源。自动搜索等特点。

Logstash :是一个完全开源的工具,主要用于日志收集,同时可以对数据处理,并输出给Elasticarch

Kibana:也是一个完全开源的工具,kibana可以为Logstash和Elasticsearch提供图形化的日志分析。Web界面,可以汇总,分析和搜索重要数据日志。

Elasticsearch介绍

Elasticsearch:是基于Lucene的搜索服务器,它稳定、可靠、快速,而且具有比较好的水平扩展能力,为分布式环境设计,在云计算应用很广泛。

Elasticsearch的基础核心概念。

接近实时(NRT):Elasticsearch是一个搜索速度接近实时的搜索平台,响应速度非常的快,从索引一个文档直到能够被搜索到只有一个轻微的延迟(通常是1s)

群集(cluster):群集就是由一个或多个节点组织在一起,在所有的节点上存放用户数据,并一起提供索引和搜索功能。通过选举产生节点,并提供跨节点的联合索引和搜索的功能。每个群集都有一个唯一的表示名称,默认是Elasticsearch,每个节点是基于群集名字加入到其群集中的。一个群集可以只有一台节点,为了具备更好的容错性,通常配置多个节点,在配置群集时,建议配置成群集模式。

节点(node):是指一台单一的服务器,多个节点组织为一个群集,每个节点都存储数据并参与群集的索引和搜索功能。和群集一样,节点也是通过名字来标识的。默认情况下,节点名字是随机的,也可以自定义。

索引(index):类似于关系型数据库中的“库”,当索引一个文档后,就可以使用elasticsearch搜索到该文档,也可以简单地将索引理解为存储数据库的地方,可以方便地进行全文索引。

分片和副本(shards&replicas):elasticsearch将索引分成若干个部分,每个部分称为一个分片,每个分片就是一个功能的独立索引。分片的数量一般在索引创建前指定,且创建索引后不能更改。

Logstash介绍

Logstash由JRuby语言编写,运行在Java虚拟机上,是一款强大的数据库处理工具,可以实施数据传输,格式处理,格式化输出。Logstash具有强大的插件功能,常用于日志处理。Logstash可配置单一的代理端,与其他开源软件结合,以实现不同的功能。

Logstash的理念很简单,它只做三件事:数据输入;数据输出;数据加工(如加工、更改等)。

Logstash的主要组件都有:

Shipper:日志收集者。负责监控本地日志文件的变化,及时收集最新的日志文件内容。

Indexer:日志存储者。负责接收日志并写入到本地文件。

Broker:日志Hub。负责连接多个Shipper和多个Indexer。

Search and Storage:允许对事件进行搜索和存储。

Web Interface:基于Web的展示界面。

Kibana介绍

Kibana是一个针对Elasticsearch的开源分析及可视化平台,主要设计用来和Elasticsearch一起工作,可以搜索,查看存储在Elasticsearch搜索中的数据,并通过各种表进行高级数据分析及展示。

Kibana可以让数据看起来一目了然。他操作简单,基于浏览器的用户界面管理方式,用户可以在任何地点任何时间都可以实时监控。

Kibana的主要功能

Elasticsearch无缝之集成,kibana架构是为Elasticsearch定制的,可以将任何(结构化和非结构化)数据加入Elasticsearch索引。

整合数据:Kibana可以让海量数据变得更容易理解,根据数据内容可以创建形象的柱形图,折线图、散点图、直方图等以便用户查看。

复杂数据分析:Kibana提升了Elasticsearch的分析能力,能够更加智能地分析数据,执行数学转换并根据要求对数据切割分块。

接口灵活:使用Kibana可以更加方便地创建、保存、分享数据,并将可视化数据快速交流。

首先三台都关闭防火墙,修改主机名字,这里以node1主机为例:

[root@server ~]# systemctl stop firewalld.service 
[root@server ~]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@server ~]# setenforce 0
[root@server ~]# hostname node1
[root@server ~]# su
三台主机都安装Java环境:
[root@node1 ~]# java -version
openjdk version "1.8.0_181"
#从本机里导入安装包
[root@node1 ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  jdk-8u91-linux-x64.tar.gz  公共  模板  视频  图片  文档  下载  音乐  桌面
[root@node1 ~]# tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local/    #解压
[root@node1 ~]# cd /usr/local/
[root@node1 local]# ls
bin  etc  games  include  jdk1.8.0_91  lib  lib64  libexec  sbin  share  src
[root@node1 local]# mv jdk1.8.0_91/ jdk
[root@node1 local]# 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 local]# source /etc/profile
[root@node1 local]# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)


设置本地主机映射文件,node1和node2节点操作:
[root@node1 ~]# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.152.130 node1
192.168.152.129 node2

配置elasticsearch软件(node1.node2做相同的操作)

[root@node1 local]# cd /opt
#上传安装包
[root@node1 opt]# ls
elasticsearch-5.5.0.rpm  elasticsearch-head.tar.gz  httpd-2.4.6-95.el7.centos.x86_64.rpm  rh
[root@node1 opt]# 
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm 

#加载系统服务
[root@node1 opt]# systemctl daemon-reload 
[root@node1 opt]# systemctl enable elasticsearch.service
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
[root@node1 opt]# 

#修改主配置文件
[root@node1 opt]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# cp -a elasticsearch.yml elasticsearch.yml.bak
[root@node1 elasticsearch]# vim elasticsearch.yml
17/ cluster.name: my-elk-cluster
#集群名字
23/ node.name: node1
#节点名宁字
33/ path.data: /data/elk_data
#数据存放路径
37/ path. logs: /var/log/elasticsearch/
#日志存放路径
43/ bootstrap.memory_lock: false
#锁定物理内存地址,防止es内存被交换出去,也就是避免es使用swap交换分区,频繁的交换,会导致Ios变高(性能测试:每秒的读写次数)。
55/ network.host: 0.0.0.0
#提供服务绑定的IP地址,0.0.0.0代表所有地址
59/ http.port: 9200
#侦听端口为9200
68/ discoveryp zen.ping.unicast.hosts:["node1", "node2"]
#集群发现通过单播实现单播

[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]# 

#创建数据存放路径并授权
[root@node1 elasticsearch]# mkdir -p /data/elk_data
[root@node1 elasticsearch]# chown elasticsearch:elasticsearch /data/elk_data/

#启动elasticsearch
[root@node1 elasticsearch]# systemctl start elasticsearch.service 
[root@node1 elasticsearch]# netstat -antp | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      14330/java





#安装node组件

[root@node1 ~]# cd /opt
[root@node1 opt]# yum install gcc gcc-c++ make -y
[root@node1 opt]# ls
elasticsearch-5.5.0.rpm  elasticsearch-head.tar.gz  httpd-2.4.6-95.el7.centos.x86_64.rpm  node-v8.2.1.tar.gz  rh
[root@node1 opt]# tar xzvf node-v8.2.1.tar.gz 
[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 ..
[root@node1 opt]# ls
elasticsearch-5.5.0.rpm    httpd-2.4.6-95.el7.centos.x86_64.rpm  node-v8.2.1.tar.gz                    rh
elasticsearch-head.tar.gz  node-v8.2.1                           phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 opt]# 
[root@node1 opt]# tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
[root@node1 opt]# cd /usr/local/src/
[root@node1 src]# ls
phantomjs-2.1.1-linux-x86_64
[root@node1 phantomjs-2.1.1-linux-x86_64]# ls
bin  ChangeLog  examples  LICENSE.BSD  README.md  third-party.txt
[root@node1 phantomjs-2.1.1-linux-x86_64]# cd bin
[root@node1 bin]# ls
phantomjs
[root@node1 bin]# cp phantomjs /usr/local/bin/
[root@node1 bin]# 

#安装elasticsearch-head数据可视化工具
[root@node1 bin]# cd /opt
[root@node1 opt]# tar xzvf elasticsearch-head.tar.gz -C /usr/local/src 
[root@node1 opt]# cd /usr/local/src/
[root@node1 src]# ls
elasticsearch-head  phantomjs-2.1.1-linux-x86_64
[root@node1 src]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install

#修改主配置文件
[root@node1 elasticsearch-head]# cd
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
#在最后补充
http.cors.enabled: true       #开启跨域访问支持,默认为false
http.cors.allow-origin: "*"   #跨域访问允许的域名地址


#启动elasticsearch-head
[root@node1 ~]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start &  
[1] 60746
[root@node1 elasticsearch-head]# 
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

node1.node2做相同的操作,然后开启服务,确定端口是否都已经开启,这时候是9100端口:

[root@node1 elasticsearch-head]# npm run start & 
[1] 64014
[root@node1 elasticsearch-head]# 
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
[root@node1 ~]# netstat -antp | grep 9100  


[root@node2 elasticsearch-head]# npm run start & 
[1] 119353
[root@node2 elasticsearch-head]# 
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
[root@node2 ~]# netstat -antp | grep 9100  

回到node1节点创建索引,登陆网页测试:

[root@node1 elasticsearch-head]# cd
[root@node1 ~]# 
[root@node1 ~]# 
[root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"aaa","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@apache ~]# yum -y install httpd
[root@apache ~]# systemctl start httpd
[root@apache ~]# netstat -ntap |grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      19669/httpd         
[root@apache ~]# 

#安装logstash服务并启动
[root@apache ~]# cd /opt
[root@apache opt]# ls
logstash-5.5.1.rpm  rh
[root@apache opt]# rpm -ivh logstash-5.5.1.rpm
[root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/  #创建一个软链接
[root@apache opt]# systemctl start logstash.service
[root@apache opt]# systemctl enable logstash.service
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.

与elasticsearch(node)做对接测试:

Logstash这个命令测试,字段描述解释:
 -f  通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
 -e  后面跟着字符串 该字符串可以被当做logstash的配置(如果是” ”,则默认使用stdin做为输入、stdout作为输出)
 -t  测试配置文件是否正确,然后退出
 
#输入采用标准输入 输出采用标准输出,进行测试
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{} }'





做对接配置

Logstash配置文件主要由三部分组成:input、output、filter(根据需要来处理)

[root@apache opt]# chmod o+r /var/log/messages  #给其他用户读的权限
[root@apache opt]# ll /var/log/messages
-rw----r--. 1 root root 288219 814 10:52 /var/log/messages
[root@apache opt]# vim /etc/logstash/conf.d/system.conf 

input {
       file{
        path => "/var/log/messages"      #收集数据的路径
        type => "system"                 #类型
        start_position => "beginning"    #从开头收集数据
       }
      }
output {
       elasticsearch {
          hosts => ["192.168.152.130:9200"]  #输出到
          index => "system-%{+YYYY.MM.dd}"   #索引
          }
       }

[root@apache opt]# systemctl restart logstash.service


node1主机安装kibana

配置过程

#安装kibana:
[root@node1 ~]# cd /usr/local/src/
[root@node1 src]# ls
elasticsearch-head  kibana-5.5.1-x86_64.rpm  phantomjs-2.1.1-linux-x86_64
[root@node1 src]# rpm -ivh kibana-5.5.1-x86_64.rpm 

#修改配置文件:
[root@node1 src]# cd /etc/kibana/
[root@node1 kibana]# cp kibana.yml kibana.yml.bak
[root@node1 kibana]# vim kibana.yml

2# server.port: 5601       #kibana打开的端口
7# server.host: "0.0.0.0"   #kibana侦听的地址
21# elasticsearch.url: "http: //192.168.152.130:9200"  #利和elasticsearch建立联系
30# kibana .index : ".kibana"   #在elasticsearch中添加.kibana索引

[root@node1 kibana]# grep -v "^#" kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://192.168.152.130:9200"
kibana.index: ".kibana"

#启动服务
[root@node1 kibana]# systemctl start kibana.service
[root@node1 kibana]# systemctl enable kibana.service 


对接apache的日志

配置过程

[root@apache opt]# cd /etc/logstash/conf.d/
[root@apache conf.d]# ls
system.conf
[root@apache conf.d]# vim apache_log.conf

input {
       file{
        path => "/etc/httpd/logs/access_log"
        type => "access"
        start_position => "beginning"
        }
       file{
        path => "/etc/httpd/logs/error_log"
        type => "error"
        start_position => "beginning"
        }
        
      }
output {
        if [type] == "access" {
        elasticsearch {
          hosts => ["192.168.152.130:9200"]
          index => "apache_access-%{+YYYY.MM.dd}"
          }
        }
        if [type] == "error" {
        elasticsearch {
          hosts => ["192.168.152.130:9200"]
          index => "apache_error-%{+YYYY.MM.dd}"
          }
        }
        }

[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf 




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值