文章目录

  • 一、ELK 日志分析系统简介
  • 1.1、ELK 日志分析系统概述
  • 1.2、日志处理步骤
  • 1.3、ElasticSearch 介绍
  • 1.4、Logstash 介绍
  • 1.5、Kiabana 介绍
  • 二、实验系统搭建
  • 2.1、实验环境
  • 2.2、配置Elasticsearch 环境
  • 2.3、node1 和node2 安装elasticsearch-head 插件
  • 2.4、apache 服务器部署logstash
  • 2.5、node2 主机安装kibana
  • 2.6、对接Apache主机的Apache 日志文件


一、ELK 日志分析系统简介

1.1、ELK 日志分析系统概述

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

搭建日志监控 elk elk搭建日志系统_Elastic

1.2、日志处理步骤

1.将日志进行集中化管理

2.将日志格式化(Logstash)并输出到Elasticsearch

3.对格式化后的数据进行索引和存储(Elasticsearch)

4.前端数据的展示(Kibana)

1.3、ElasticSearch 介绍

Elasticsearch是用Java开发的,提供了一个分布式多用户能力的全文搜索引擎,设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

Elasticsearch的基础核心概念:

(1)接近实时(NRT)
elasticsearch是一个接近实时的搜索平台,这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒)

(2)集群(cluster)
集群包含多个节点,每个节点属于哪个集群是通过一个配置(集群名称,默认是elasticsearch)来决定的,对于中小型应用来说,刚开始一个集群就一个节点很正常、

(3)节点(node)
集群中的一个节点,节点也有一个名称(默认是随机分配的),节点名称很重要(在执行运维管理操作的时候),默认节点会去加入一个名称为“elasticsearch”的集群,如果直接启动一堆节点,那么它们会自动组成一个elasticsearch集群,当然一个节点也可以组成一个elasticsearch集群。

(4)索引(index)
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,如果你想,可以定义任意多的索引。
索引相对于关系型数据库的库。

(5)索引(index)
ElasticSearch将它的数据存储在一个或多个索引(index)中。用SQL领域的术语来类比,索引就像数据库,可以向索引写入文档或者从索引中读取文档,并通过ElasticSearch内部使用Lucene将数据写入索引或从索引中检索数据。

(6)文档(document)
文档(document)是ElasticSearch中的主要实体。对所有使用ElasticSearch的案例来说,他们最终都可以归结为对文档的搜索。文档由字段构成。

(7)分片(shards)
代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。5.X默认不能通过配置文件定义分片

(8)副本(replicas)
代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

1.4、Logstash 介绍

Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤、格式处理、格式化输出,并将其存储,供以后使用(如,搜索)。

Logstash由JRuby语言编写,基于消息(message-based)的简单架构,并运行在Java虚拟机(JVM)上。不同于分离的代理端(agent)或主机端(server),LogStash可配置单一的代理端(agent)与其它开源软件结合,以实现不同的功能。

Logstash的理念很简单,它只做3件事情:

Collect:数据输入
Enrich:数据加工,如过滤,改写等
Transport:数据输出

(1)LogStash的主要组件:

Shipper:日志收集者 。负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可;

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

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

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

Web Interface:基于Web的展示界面

正是由于以上组件在LogStash架构中可独立部署,才提供了更好的集群扩展性

(2)LogStash主机分类:

代理主机(agent host):作为事件的传递者(shipper),将各种日志数据发送至中心主机;只需运行Logstash 代理(agent)程序;

中心主机(central host):可运行包括中间转发器(Broker)、索引器(Indexer)、搜索和存储器(Search and Storage)、Web界面端(Web Interface)在内的各个组件,以实现对日志数据的接收、处理和存储

1.5、Kiabana 介绍

Kibana是一个针对Elasticsearch的开源分析及可视化平台

搜索、查看交互存储在Elasticsearch索引中的数据

可以通过各种图表进行高级数据分析及展示

Kiabana主要功能:

Elasticsearch无缝之集成

整合数据,复杂数据分析

让更多团队成员受益

接口灵活,分享更容易

配置简单,可视化多数据源

简单数据导出

二、实验系统搭建

2.1、实验环境

VMware虚拟机
一台centos7.4虚拟机,IP地址为:20.0.0.21,主机名为:node1,需要服务 Elasticsearch

一台centos7.4虚拟机,IP地址为:20.0.0.22,主机名为:node2,需要服务 Elasticsearch,Kibana

一台centos7.4虚拟机,IP地址为:20.0.0.23,主机名为:apache,需要服务 Logstash,Apache

防火墙,核心防护关闭

2.2、配置Elasticsearch 环境

(1)登录20.0.0.21,更改主机名,配置域名解析,查看Java环境(没有则需要)

hostnamectl set-hostname node1

vi /etc/hosts
20.0.0.21 node1
20.0.0.22 node2

java -version

(2)安装Elasticsearch
把准备好的包拖进来解压

rpm -ivh elasticsearch-5.5.0.rpm 

 systemctl daemon-reload 

 systemctl enable elasticsearch.service

(3)修改配置文件

cp -p /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak

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

(4)创建数据存放路径并授权

mkdir -p /data/elk_data/
 chown elasticsearch:elasticsearch /data/elk_data/

(5)启动Elasticsearch

systemctl start elasticsearch.service
netstat -antp | grep 9200

(6)真机浏览器打开 20.0.0.21:9200

搭建日志监控 elk elk搭建日志系统_apache_02


(7)配置node2:20.0.0.22 Elasticsearch环境 与上面几乎一致

主机名设为node2

修片配置文件为 23 node.name: node2

然后真机浏览器打开 20.0.0.22:9200

搭建日志监控 elk elk搭建日志系统_Elastic_03


(8)集群健康检查和状态

真机浏览器输入20.0.0.21:9200/_cluster/health?pretty(换成20.0.0.22:9200/_cluster/health?pretty也可以)

搭建日志监控 elk elk搭建日志系统_搭建日志监控 elk_04

2.3、node1 和node2 安装elasticsearch-head 插件

上述安装成功后查看非常不直观,所以我们通过安装elasticsearch-head插件的方式来更加直观的查看集群情况,方便管理,以下仅展示node1的操作
(1)编译安装node组件依赖包
上传包到home

yum -y install gcc-c++ make gcc
   
   tar zxvf node-v8.2.1.tar.gz 
   
   cd node-v8.2.1/
   
    ./configure 
  
   make -j3       编译时间较长约半个小时
   
   make install

(2)安装phantomjs(前端框架)
上传包到/usr/local/src/

cd /usr/local/src/
  
  tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 
 
  cd phantomjs-2.1.1-linux-x86_64//bin

  cp phantomjs /usr/local/bin

(3)安装elasticsearch-head(数据可视化工具)
上传包到/usr/local/src/

cd /usr/local/src/

tar zxvf elasticsearch-head.tar.gz

cd elasticsearch-head/

npm install

(4)修改主配置文件

vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"

systemctl restart elasticsearch.service

(5)启动elasticsearch-head

cd /usr/local/src/

cd elasticsearch-head/

npm run start &

netstat -lnupt |grep 9100

插入索引
curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

(6)真机浏览器输入20.0.0.21:9100

搭建日志监控 elk elk搭建日志系统_elasticsearch_05

2.4、apache 服务器部署logstash

(1)开局优化

hostnamectl set-hostname apache

yum -y install httpd

systemctl start httpd

java -version      没有java环境需安装

(2)安装logstash
上传包到/pot

rpm -ivh logstash-5.5.1.rpm

systemctl start logstash.service

systemctl enable logstash.service

ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

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

输入采用标准输入 输出采用标准输出,进行测试

[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{} }'

The stdin plugin is now waiting for input:
11:33:17.455 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com                 输入网址
2020-10-29T03:33:26.424Z apache www.baidu.com

测试:使用rubydebug显示详细输出,codec为一种编解码器

[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

The stdin plugin is now waiting for input:
11:30:32.066 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com             输入网址
{
    "@timestamp" => 2020-10-29T03:30:59.822Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "www.baidu.com"

使用logstash将信息写入elasticsearch中

[root@apache opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["20.0.0.21:9200"] } }'

The stdin plugin is now waiting for input:
11:43:46.129 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com                      输入网址

(4)真机浏览器访问node1节点,查看索引信息

搭建日志监控 elk elk搭建日志系统_apache_06


(5)做对接配置

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

chmod o+r /var/log/messages

[root@apache opt]# vi /etc/logstash/conf.d/system.conf

input {
    file{
    path => "/var/log/messages"
    type => "system"
    start_position => "beginning"
    }
   }
output {
    elasticsearch {
    hosts => ["20.0.0.21:9200"]
    index => "system-%{+YYYY.MM.dd}"
    }
   }

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

真机查看

搭建日志监控 elk elk搭建日志系统_apache_07

2.5、node2 主机安装kibana

上传包到/usr/local/src/

cd /usr/local/src/

rpm -ivh kibana-5.5.1-x86_64.rpm

cd /etc/kibana/

cp -p kibana.yml kibana.yml.bak

[root@node2 kibana]# vi kibana.yml
2 server.port: 5601
7 server.host: "0.0.0.0"
21 elasticsearch.url: "http://20.0.0.21:9200"
30 kibana.index: ".kibana"

[root@node2 kibana]# systemctl start kibana.service 
[root@node2 kibana]# systemctl enable kibana.service

真机查看

搭建日志监控 elk elk搭建日志系统_apache_08


搭建日志监控 elk elk搭建日志系统_elasticsearch_09


搭建日志监控 elk elk搭建日志系统_搭建日志监控 elk_10

2.6、对接Apache主机的Apache 日志文件

cd /etc/logstash/conf.d/

touch apache_log.conf


[root@apache conf.d]# vi 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 => ["20.0.0.21:9200"]
    index => "apache_access-%{+YYYY.MM.dd}"
    }
   }
    if [type] == "error" {
    elasticsearch {
    hosts => ["20.0.0.21:9200"]
    index => "apache_error-%{+YYYY.MM.dd}"
    }
   }
   }
[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf

先真机访问apache网站20.0.0.23 产生日志

搭建日志监控 elk elk搭建日志系统_搭建日志监控 elk_11

然后再访问http://20.0.0.21:9100能发现两个索引信息

搭建日志监控 elk elk搭建日志系统_apache_12


可以进入kibana界面创建索引

搭建日志监控 elk elk搭建日志系统_apache_13


搭建日志监控 elk elk搭建日志系统_elasticsearch_14


搭建日志监控 elk elk搭建日志系统_搭建日志监控 elk_15


平台搭建成功