文章目录

  • 简介
  • ELK日志分析系统组成
  • ELK日志处理步骤的作用
  • Elasticsearch介绍
  • 概述
  • 核心概念
  • Logstash介绍
  • 概述
  • Logstash的理念很简单
  • Logstash的主要组件
  • Kibana介绍
  • 概述
  • Kibana的主要功能
  • 实施案列
  • 需求描述
  • 集群检查健康和状态
  • 安装Elasticsearch-head插件
  • 安装Logstash
  • 192.168.100.2 Apache主机 做对接配置
  • 安装 kibana
  • 对接Apache的主机Apache日志文件测试


简介

ELK日志分析系统是Logstash、Elasticsearch、Kibana开源软件的集合,对外是作为一个日志管理系统的开源方案,它可以从任何来源、任何格式进行日志搜索、分析与可视化展示、三大组件构成的一个基于web页面的日志分析工具。

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

ELK日志分析系统组成

  • elasticsearch(es):通过搭建群集;存储日志数据,索引日志数据
  • logstash :收集日志,收集到了后给es存储
  • kibana :视图形式展现日志信息,更加人性化

ELK日志处理步骤的作用

  • 将日志进行集中化管理
  • 将日志格式化(Logstash)并输出到Elasticsearch
  • 对格式化后的数据进行索引和存储(Elasticsearch)
  • 前端数据的展示(Kibana)

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的展示界面。

注:组件在Logstash架构中可独立部署,才能提供更好的群集扩展性。在Logstash中包含三个阶段,分别是输入(Input)、处理(Filter非必要)和输出(Output)

Kibana介绍

概述

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

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

Kibana的主要功能

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

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

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

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

实施案列

注:防火墙一定要关闭

环境:

版本:CentOS7

准备三台虚拟机,内存条需要2,4G以上内存,内存小了怕运行不起节点

192.168.100.2 Apache

192.168.100.3 node1

192.168.100.4 node2

elk一键部署 elk组件_linux

需求描述

配置ELK日志分析群集
使用Logstash收集日志
使用Kibana查看分析日志

把软件放入自己创建的aaa文件里面
[root@node1 aaa]# ll elk/ //查看放入的软件包
总用量 265132
-rw-r--r--. 1 root root 33396354 1月   6 18:50 elasticsearch-5.5.0.rpm
-rw-r--r--. 1 root root 37926436 1月   6 18:50 elasticsearch-head.tar.gz
-rw-r--r--. 1 root root 52255853 1月   6 18:50 kibana-5.5.1-x86_64.rpm
-rw-r--r--. 1 root root 94158545 1月   6 18:50 logstash-5.5.1.rpm
-rw-r--r--. 1 root root 30334692 1月   6 18:50 node-v8.2.1.tar.gz
-rw-r--r--. 1 root root 23415665 1月   6 18:50 phantomjs-2.1.1-linux-x86_64.tar.bz2

配置主机名并配置host文件以便DNS解析
注:节点都要配置
vim /etc/hosts

192.168.100.3 node1
192.168.100.4 node2

检查本机是否存在Java环境

//没有就安装yum -y install java
java -version  
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

部署elasticsearch软件

//先解压elasticsearch-5.5.0.rpm 
[root@node1 elk]# rpm -ivh elasticsearch-5.5.0.rpm 
//加载系统服务
systemctl daemon-reload 
systemctl enable elasticsearch.service

更改elasticsearch主配置文件
cd /etc/elasticsearch/

[root@node1 elasticsearch]# cp elasticsearch.yml  elasticsearch.yml.bak

vi /etc/elasticsearch/elasticsearch.yml
//set nu
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
55 network.host: 0.0.0.0
59 http.port: 9200
68 discovery.zen.ping.unicast.hosts: ["node1", "node2"]

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 //提供服务绑定IP地址,0000代表所有地址
http.port: 9200 //侦听端口
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
//群集发现通过单薄实

创建数据存放路径授权

mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
[root@node2 data]# ll
总用量 0
drwxr-xr-x. 2 elasticsearch elasticsearch 6 1月   6 20:15 elk_data

//启动elasticsearc是否成功开启
systemctl start elasticsearch.service  
//可能要等一小会
netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      57855/java

集群检查健康和状态

火狐查看node1节点192.168.100.3:9200

Host192.168.100.3:9200

elk一键部署 elk组件_elasticsearch_02


http://192.168.100.4:9200/_cluster/health?pretty检查群集健康情况:/_cluster/health?prettyelk一键部署 elk组件_elk_03

http://192.168.100.4:9200/_cluster/state?pretty 检查群集状况信息:/_cluster/state?prettyelk一键部署 elk组件_数据库_04

node2节点配置跟node1就节点名称不一样。

[root@node2 ~]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml
cluster.name: my-elk-cluster
node.name: node2
path.data: /data/elk_bata
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"]

注:要想更方便管理群集,可以通过安装Elasticsearch插件,上述查看群集方式及其不方便

安装Elasticsearch-head插件

lasticsearch在5.0版本过后,Elasticsearch-head插件需要做独立服务进行安装,需要npm命令。安装Elasticsearch-head需要提前把node和phantomjs软件包安装好。Node是一个基于Chrome V8引擎的JavaScript运行环境,而phantomjs是一个基于webkit的JavaScriptAPI。可以理解为一个隐形的浏览器,任何基于webkit浏览器做的事情,它都可以做到。

注:软件包放在aaa/elk

编译安装node组件依赖包

yum install gcc gcc-c++ make -y
cd /aaa/elk/
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure 
make -j3 //有点久慢慢等
make install

安装phanytomjs前端框架
注:上传软件包到/usr/local/src/目录

cd /aaa/elk/
//软件包到/usr/local/src/目录
[root@node1 elk]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2  -C /usr/local/src/
[root@node1 elk]# cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/
[root@node1 bin]# ll
总用量 66340
-rwxr-xr-x. 1 root root 67932064 1月  25 2016 phantomjs
cp phantomjs /usr/local/bin/

安装elasticsearch-head

cd /aaa/elk/
//件包到/usr/local/src/目录
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm install
.......
up to date in 1.718s

修改Elasticsearch主配置文件
注:最后一行添加

vi /etc/elasticsearch/elasticsearch.yml

http.cors.enabled:true
//开启跨域访问支持,默认false
http.cors.allow-origin: "*"表示所有IP地址
//跨域访问的域名地址,"*"表示所有IP地址

启动elasticsearch-head服务器

cd /usr/local/src/elasticsearch-head/
//将服务位置放置后台允许一旦中断 服务也会一起关闭
[root@node1 elasticsearch-head]# npm run start &
[1] 105440
[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

查看服务9100,9200启动没有

netstat -anpt | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      105450/grunt       

[root@node2 ~]# systemctl start elasticsearch.service 
[root@node2 ~]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      102582/java

火狐查看node1节点192.168.100.3:9100,节点192.168.100.4:9100情况

elk一键部署 elk组件_elasticsearch_05


注:网页浏览Elasticsearch信息:(健康值为绿色)

elk一键部署 elk组件_linux_06


elk一键部署 elk组件_数据库_07


elk一键部署 elk组件_linux_08

尝试索引为index-demo

注:索引默认被分片5个,并且一个副本

elk一键部署 elk组件_elasticsearch_09

注:用红色框起来的是副本数,黑色是主分数

安装Logstash

192.168.100.2 Apache

Logstash一般部署在需要监控其他日志的服务器中
安装Logstash并做一些日志搜索输出到elasticsearch中

先安装Apache服务器(httpd)

yum -y install httpd
systemctl start httpd
netstat -anpt | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      64157/httpd

安装java环境

java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

安装Logstash

cd /aaa/elk //软件包存放地
[root@apache elk]# rpm -ivh logstash-5.5.1.rpm 
systemctl start logstash.service
systemctl enable logstash.service 

//建立logstash软连接
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

Logstash这个命令字段解释

-f  通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
-e  后面跟着字符串该字符串可以被当做logstash的配置(如果是” ”,则默认使用stdin做为输入、stdout作为输出)
—t  测试配置文件是否正确,然后退出

输入采用标准输入,输出采用标准输出

logstash -e 'input { stdin{} } output { stdout{} }'
.......
PI endpoint {:port=>9600} //下面输入
www.taobao.com
2021-01-06T16:32:30.215Z apache www.taobao.com

rubydebug显示详细输出

//codec为一种编辑码器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
.......
PI endpoint {:port=>9600}
www.baidu.com
{
    "@timestamp" => 2021-01-06T16:35:20.072Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "www.baidu.com"
}

使用logstash将信息写入elasticsearch中

logstash -e 'input { stdin{} } output { elasticsearch { hosts=92.168.100.3:9200"] } }'
......
PI endpoint {:port=>9600}
www.baidu.com  
www/^H^H^H^H^[[3~
www.taobao.com
//www开头是写入的内容

查看192.168.100.3:9100/ 查看索引信息

elk一键部署 elk组件_数据库_10


elk一键部署 elk组件_elasticsearch_11

192.168.100.2 Apache主机 做对接配置

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

下面配置通过修改Logstash配置文件,让收集系统日志/var/log/messages,并将其输出到Elasticsearch中。

chmod o+r /var/log/messages
[root@apache ~]# ll /var/log/messages 
-rw----r--. 1 root root 602104 1月   7 00:54 /var/log/messages

vim /etc/logstash/conf.d/system.conf
//添加以下内容
input {
   file{
 path => "/var/log/messages"
 type => "system"
 start_position => "beginning"
}
}
output {
 elasticsearch {
 hosts => [ "192.168.100.3:9200"]
 index => "system-%{+YYYY.MM.dd}"
}
}

systemctl restart logstash.service

查看192.168.100.3:9100/ 查看索引信息

elk一键部署 elk组件_linux_12


elk一键部署 elk组件_数据库_13

安装 kibana

node1主机安装 kibana

cd /aaa/elk/
[root@node1 elk]# rpm -ivh kibana-5.5.1-x86_64.rpm 

cd /etc/kibana/
[root@node1 kibana]# ll
总用量 8
-rw-r--r--. 1 root root 4649 7月  19 2017 kibana.yml

cp kibana.yml  kibana.yml.bak
root@node1 kibana]# ll
总用量 16
-rw-r--r--. 1 root root 4649 7月  19 2017 kibana.yml
-rw-r--r--. 1 root root 4647 1月   7 01:13 kibana.yml.bak

修改kibana配置

vi kibana.yml
2 server.port: 5601 //Kibana的端口
7 server.host: "0.0.0.0" //侦听的地址
21 elasticsearch.url: "http://192.168.100.3:9200" //和Elasticsearch 建立连接
30 kibana.index: ".kibana" //在Elasticsearch 中添加.Kibana索引

启动 kibana

[root@node1 kibana]# systemctl restart kibana.service 
[root@node1 kibana]# netstat -anpt | grep 5601
tcp        0      0 0.0.0.0:5601            0.0.0.0:*               LISTEN      107471/node

浏览器访问http://192.168.100.3:5601

elk一键部署 elk组件_elk_14

*创建了system-索引

elk一键部署 elk组件_linux_15


elk一键部署 elk组件_elk一键部署_16

注:有什么错误可以直接查看,推荐谷歌浏览器可以翻译

对接Apache的主机Apache日志文件测试

192.168.100.2Apache页面添加

cd /etc/logstash/conf.d/
touch apache_log.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.100.3:9200"]
          index => "apache_access-%{+YYYY.MM.dd}"
         }
        }
        if [type] == "error" {
        elasticsearch {
          hosts => ["192.168.100.3:9200"]
          index => "apache_error-%{+YYYY.MM.dd}"
         }
        }
       }
       
 [root@apache conf.d]# vim apache_log.conf

start_position => “beginning”:从日志的开头开始

注:先正确访问以下192.168.100.2Apache页面

访问Elasticsearch192.168.100.3:9100查看索引

elk一键部署 elk组件_linux_17


再去访问kibana192.168.100.3:5601 创建apache_access,error

注:名字apache_access不要搞错

elk一键部署 elk组件_linux_18