ELK日志分析系统

 2020-03-27 

文章目录

    • ELK日志分析系统简介
      • ELK工作原理
      • 日志服务器的优缺点
      • ELK日志处理步骤
    • Elasticsearch介绍
      • Elasticsearch概述
      • Elasticsearch概念
      • 分片和副本的主要原因
    • Logstash介绍
      • Logstash概述
      • Logstash重要组件
      • Logstash主机分类
    • Kibana介绍
      • Kibana概述
      • Kibana主要功能
    • 配置ELK日志分析系统
      • 实验准备
      • 实验步骤
        • 配置elasticsearch环境
        • 部署elasticsearch软件
        • 安装elasticsearch-head插件
        • 安装logstash软件
        • Logstash与Elasticsearch对接
        • Apache主机对接
        • 安装与配置kibana
      • 实验注意项

ELK日志分析系统简介

ELK工作原理

【APPServer集群】→→【logstash Agent 采集器】→→【ElasticSearch Cluster】→→【Kibana Server】→→【Browser】
在这里插入图片描述

日志服务器的优缺点

  • 优点:提高安全性;集中存放日志
  • 缺点:对日志的分析困难

ELK日志处理步骤

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

Elasticsearch介绍

Elasticsearch概述

  • 提供了一个分布式多用户能力的全文引擎搜索

Elasticsearch概念

  • 接近实时(NRT):Elasticsearch是一个接近实时的搜索平台,这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒)
  • 集群(Cluster):一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。
  • 节点(Node):节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。
  • 索引(Index):一个索引就是一个拥有几分相似特征的文档的集合。
    ●索引相对于关系型数据库的库。
  • 类型(Type):在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常会为具有一组共同字段的文档定义一个类型。
    ●类型相对于关系型数据库的表
  • 文档(Document):一个文档是一个可被索引的基础信息单元。
    ●文档相对于关系型数据库的列
  • 分片和副本(Shards & Replicas):在实际情况下,索引存储的数据可能超过单个节点的硬件限制。如一个10亿文档需1TB空间可能不适合存储在单个节点的磁盘上,或者从单个节点搜索请求太慢了。为了解决这个问题,elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。网络问题等其它问题可以在任何时候不期而至,为了健壮性,强烈建议要有一个故障切换机制,无论何种故障以防止分片或者节点不可用。 为此,elasticsearch让我们将索引分片复制一份或多份,称之为分片副本或副本。

分片和副本的主要原因

  • 分片原因:a. 水平分割扩展,增大存储量 ;b. 分布式并行跨分片操作,提高性能和吞吐量
  • 副本原因:a. 高可用性,以应对分片或者节点故障。出于这个原因,分片副本要在不同的节点上;b 增大吞吐量,搜索可以并行在所有副本上执行

Logstash介绍

Logstash概述

  • 一款强大的数据处理工具,可以实现数据传输、格式处理、格式化输出
  • 数据输入,数据加工(过滤,改写等),数据输出

Logstash重要组件

  • Shipper:日志收集者 。负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。
  • Indexer:日志存储者。负责接收日志并写入到本地文件。
  • Broker:日志Hub。负责连接多个Shipper和多个Indexer。
  • Search and Storage:允许对事件进行搜索和存储。
  • Web Interface:基于Web的展示界面。

Logstash主机分类

  1. 代理主机(agent host):作为事件的传递者(shipper),将各种日志数据发送至中心主机;只需运行Logstash 代理(agent)程序。
  2. 中心主机(central host):可运行包括中间转发器(Broker)、索引器(Indexer)、搜索和存储器(Search and Storage)、Web界面端(Web Interface)在内的各个组件,以实现对日志数据的接收、处理和存储。

Kibana介绍

Kibana概述

  • 一个针对Elasticsearch的开源分析及可视化平台
  • 搜索、查看存储在Elasticsearch索引中的数据
  • 通过各种图表进行高级数据分析及展示

Kibana主要功能

  • Elasticsearch无缝之集成
  • 整合数据
  • 复杂数据分析
  • 让更多团队成员受益
  • 接口灵活,分享更容易
  • 配置简单,可视化多数据源
  • 简单数据导出

配置ELK日志分析系统

实验准备

  • 操作系统: 主机名: IP地址: 主要软件
  • Centos7.6 : node1: 192.168.100.41: Elasticsearch,Kibana
  • Centos7.6 : node2: 192.168.100.41: Elasticsearch
  • Centos7.6 : apache: 192.168.100.43: Logstash,Apache

实验步骤

配置elasticsearch环境

  • node1与node2都得配置
  1. 修改主机名
1
2
3
4
5
hostnamectl set-hostname node1
vi /etc/hosts

192.168.100.41   node1
192.168.100.42   node2
  1. 查看Java版本
1
java -version

在这里插入图片描述

部署elasticsearch软件

  • node1与node2都得配置
  1. 安装elasticsearch—rpm包
1
rpm -ivh elasticsearch-5.5.0.rpm
  1. 加载系统服务
1
2
systemctl daemon-reload    
systemctl enable elasticsearch.service
  1. 更改elasticsearch主配置文件
1
2
3
4
5
6
7
8
9
10
11
cp /etc/elasticsearch/{elasticsearch.yml,elasticsearch.yml.bak}
vim /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地址,0.0.0.0代表所有地址
http.port: 9200                                        ####侦听端口为9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]           ####集群发现通过单播实现

  1. 创建数据存放路径并授权
1
2
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
  1. 启动elasticsearch是否成功开启
1
2
systemctl start elasticsearch.service
netstat -antp |grep 9200

在这里插入图片描述

  1. 查看节点信息
    输入:192.168.100.41:9200,即可查看以下代码
    在这里插入图片描述

安装elasticsearch-head插件

  • node1与node2都得配置
  1. 编译安装node组件依赖包(时间比较长)
    前提需要安装gcc编译器
1
2
3
4
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
 ./configure
make -j3 && make install
  1. 安装phantomjs
1
2
3
tar zxvf node-v8.2.1.tar.gz -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin

  1. 安装elasticsearch-head
1
2
3
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install
  1. 修改主配置文件
1
2
3
4
5
6
vim /etc/elasticsearch/elasticsearch.yml

http.cors.enabled: true
http.cors.allow-origin: "*"

systemctl restart elasticsearch
  1. 启动elasticsearch-head
1
2
3
4
5
6
7
8
9
10
11
cd /usr/local/src/elasticsearch-head/
npm run start &     ##后台运行
[1] 114729
> 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

netstat -lnupt |grep 9100
netstat -lnupt |grep 9200

在这里插入图片描述

  1. 网页测试
  • 真机上打开浏览器输入http://192.168.100.41:9100/
  • 在Elasticsearch 后面的栏目中输入http://192.168.100.41:9200
  • 然后点连接 会发现:集群健康值: green (0 of 0)
    在这里插入图片描述
  • 在node1上创建 索引为index-demo,类型为test,可以看到成功创建:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@node1 ~]# 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
}

在这里插入图片描述
Tips:上面图可以看见索引默认被分片5个,并且有一个副本

安装logstash软件

  • 仅在在apache主机192.168.100.43上安装
  1. 更改主机名
1
hostnamectl set-hostname apache
  1. 安装Apahce服务
1
2
yum -y install httpd
systemctl start httpd

  1. 检查Java环境
    在这里插入图片描述
  2. 安装logstash
1
2
3
4
rpm -ivh logstash-5.5.1.rpm                                    ##安装logstash
systemctl start logstash.service                               ##启动logstash
systemctl enable logstash.service
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/          ##建立logstash软连接

Logstash与Elasticsearch对接

  1. logstash(Apache)与elasticsearch(node)功能是否正常,做对接测试
    Logstash这个命令测试
    字段描述解释:
    ● -f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
    ● -e 后面跟着字符串 该字符串可以被当做logstash的配置(如果是” ”,则默认使用stdin做为输入、stdout作为输出)
    ● -t 测试配置文件是否正确,然后退出

  2. 输入采用标准输入,输出采用标准输出—登录192.168.100.43 在Apache服务器上

1
2
3
4
5
6
7
8
9
logstash -e 'input { stdin{} } output { stdout{} }'
..........................  ##省略
10:08:54.060 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
2020-03-26T02:08:54.116Z apache
10:08:54.164 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com                 ####需要输入www.baidu.com
2020-03-26T02:10:11.313Z apache www.baidu.com
www.sina.com.cn               ####需要输入www.sina.com.cn
2020-03-26T02:10:29.778Z apache www.sina.com.cn
  1. 使用rubydebug显示详细输出
1
2
3
4
5
6
7
8
9
10
11
12
13
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
..........................  ##省略
10:15:07.665 [[main]-pipeline-manager] INFO  logstash.pipeline - Starting pipeline {"id"=>"main", "pipeline.workers"=>4, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>500}
The stdin plugin is now waiting for input:
10:15:07.693 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
10:15:07.804 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com
{
    "@timestamp" => 2020-03-26T02:15:39.136Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "www.baidu.com"
}
  1. 使用logstash将信息写入elasticsearch中
1
2
3
4
5
6
7
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.100.41:9200"] } }'
..........................  ##省略
The stdin plugin is now waiting for input:
10:40:06.558 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com                    ###输入内容
www.sina.com.cn                   ###输入内容
www.google.com.cn                ###输入内容
  1. 网页测试
  • 打开浏览器 输入http://192.168.100.41:9100/ 查看索引信息
    在这里插入图片描述
  • 点击数据浏览查看响应的内容
    在这里插入图片描述

Apache主机对接

  1. 配置logstash配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
chmod o+r /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.41:9200"]
          index => "system-%{+YYYY.MM.dd}"
          }
        }

systemctl restart logstash.service
  1. 网页测试
  • 打开浏览器 输入http://192.168.100.41:9100/ 查看索引信息
    在这里插入图片描述

安装与配置kibana

  • node1上面安装Kibana
  1. 安装软件
1
2
3
rpm -ivh kibana-5.5.1-x86_64.rpm
cd /etc/kibana/
cp kibana.yml kibana.yml.bak
  1. 配置Kibana主配置文件
1
2
3
4
5
6
7
8
9
vim kibana.yml

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

systemctl start kibana.service    ###启动kibana服务
systemctl enable kibana.service   ###开机启动kibana服务
  1. 网页测试
    使用浏览器输入192.168.100.41:5601
    首次登录创建一个索引 名字:system-* ##这是对接系统日志文件
    Index name or pattern 下面输入system-*
    在这里插入图片描述

  2. 对接Apache主机的Apache 日志文件(access,error)

1
2
3
cd /etc/logstash/conf.d/
touch apache_log.conf
vim apache_log.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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.41:9200"]
          index => "apache_access-%{+YYYY.MM.dd}"
          }
        }
        if [type] == "error" {
        elasticsearch {
          hosts => ["192.168.100.41:9200"]
          index => "apache_error-%{+YYYY.MM.dd}"
          }
        }
 }
1
/usr/share/logstash/bin/logstash -f apache_log.conf

  1. 网页测试
    打开输入http://192.168.100.43
    打开浏览器 输入http://192.168.100.41:9100/ 查看索引信息
    在这里插入图片描述
    打开浏览器 输入http://192.168.100.41:5601
    点击左下角有个management选项—index patterns—create index pattern
    ----分别创建apache_error-* 和 apache_access-* 的索引
    在这里插入图片描述
    在这里插入图片描述

实验注意项

  1. 当Elasticsearch服务启动不来的时候,可以使用systemctl daemon-reload,重新加载服务,或者重启主机,然后再启动服务。
  2. 在做此实验的时候,一定要记得关闭防火墙服务。