目录

ELK是什么

ELK的主要优点

为什么要使用elk

                ELK 的好处:

elk组件的作用

        elasticsearch核心概念(属于elk的老大)

                分片的两个最主要原因:

        logstash的基本概念

        Kibana 

                主要功能

ELK工作原理

 使用场景

搭建elk

​                使用插件管理 

                登录 Apache主机 做对接配置

                安装kibana

                对接Apache主机的Apache 日志文件(访问的、错误的)

 启动日志

 总结

                本次所用到的软件包


ELK是什么

        通俗来讲,ELK是由Elasticsearch(日志存储和搜索)、Logstash(日志收集)Kibana(查看日志)三个开源软件的组成的一个组合体,ELK是elastic公司研发的一套完整的日志收集、分析和展示的企业级解决方案,在这三个软件当中,每个软件用于完成不同的功能,ELK又称为ELKstack。 官方域名为elastic.co。

ELK的主要优点

  1. 处理方式灵活:elasticsearch是实时全文索引,具有强大的搜索功能 (支持任意key全文搜索)

  2. 配置相对简单:elasticsearch的API全部使用JSON接口,logstash使用模块配置,kibana的配置文件部分更简单。

  3. 检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。

  4. 集群线性扩展:elasticsearch和logstash都可以灵活线性扩展,节点读写出现瓶颈可以扩容(3 5 7 11个服务器)

  5. 前端操作绚丽:kibana的前端设计比较绚丽,而且操作简单(早期比较简单)

为什么要使用elk

        ELK 组件在海量日志系统的运维中,可用于解决以下主要问题:- 分布式日志数据统一收集,实现集中式查询和管理

  1. 故障排查

  2. 安全信息和事件管理

  3. 报表功能

                ELK 的好处:

ELK 组件在大数据运维系统中,主要可解决的问题如下:

  1. 日志查询,问题排查,故障恢复,故障自愈

  2. 应用日志分析,错误报警

  3. 性能分析,用户行为分析

elk组件的作用

        elasticsearch核心概念(属于elk的老大)

1、接近实时(NRT)

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

2、集群(cluster)

        一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。其中一个节点为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。集群有一个唯一性标示的名字,默认是elasticsearch,集群名字很重要,每个节点是基于集群名字加入到其集群中的。因此,确保在不同环境中使用不同的集群名字。 一个集群可以只有一个节点。强烈建议在配置elasticsearch时,配置成集群模式。

3、节点(node)

        节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。像集群一样,节点也是通过名字来标识默认是在节点启动时随机分配的字符名。当然,你可以自己定义。该名字也很重要,在集群中用于识别服务器对应的节点。

         节点可以通过指定集群名字来加入到集群中。默认情况,每个节点被设置成加入到elasticsearch集群。如果启动了多个节点,假设能自动发现对方,他们将会自动组建一个名为elasticsearch的集群。

4、索引(index)

        一个索引就是一个拥有几分相似特征的文档的集合。

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

        ●索引相对于关系型数据库的库。

5、类型(type)

         在一个索引中,你可以定义一种或多种类型。

一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。 ●类型相对于关系型数据库的表

6、文档(document)

        一个文档是一个可被索引的基础信息单元。

        比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以SON(Javascript Object NMotation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。 在一个index/type里面,只要你想,你可以存储任意多的文档。注意,虽然一个文档在物理上位于一个索引中,实际上一个文档必须在一个索引内被索引和分配一个类型。 ●文档相对于关系型数据库的列。

7、分片和副本(shards & replicas )

        在实际情况下,索引存储的数据可能超过单个节点的硬件限制。

        如一个10亿文档需1TB空间可能不适合存储在单个节点的磁盘上, 或者从单个节点搜索请求太慢了。为了解决这个问题,elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。

                分片的两个最主要原因:

        1、水平分割扩展,增大存储

        2、分布式并行跨分片操作,提高性能和吞吐量

        分布式分片的机制和搜索请求的文档如何汇总完全是有elasticsearch控制的,这些对用户而言是透明的。 网络问题等等其它问题可以在任何时候不期而至,为了健壮性,强烈建议要有一个故障切换机制,无论何种故障以防止分片或者节点不可用。

        为此,elasticsearch让我们将索引分片复制一份或多份,称之为分片副本或副本。 ​ 副本也有两个最主要原因:

a.高可用性,以应对分片或者节点故障。出于这个原因,分片副本要在不同的节点上。 b. 读写性能,增大吞吐量,搜索可以并行在所有副本上执行。

        总之,每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和副本的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变副本的数量,但是你事后不能改变分片的数量

        默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个副本,这意味着, 如果你的集群中至少有两个节点,你的索引将会有5个主分片 和另外5个副本分片(1个完全拷贝),这样的话每个索引总共就有10个分片。

        logstash的基本概念

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

        Logstash 是一个具有实时传输能力的数据收集引擎,其可以通过插件实现日志收集和转发,支持日志过滤,支持普通 log、自定义 json 格式的日志解析,最终把经过处理的日志发送给 elasticsearch。    

它由三部分组成

  • Shipper-发送日志数据

  • Broker-收集数据,缺省内置 Redis

  • Indexer-数据写入

        Kibana 

        是一款基于apache开源协议,使用JavaScript编写,为Elasticsearch提供分析和可视化的Web平台。它可以Elasticsearch的索引中查找,交互数据,并生成各种维度的表图就相当与一个前端数据的展示

        Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。 ​ 使用Kibana,可以通过各种图表进行高级数据分析及展示。Kibana让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard))实时显示Elasticsearch查询动态。设置Kibana非常简单。无需编写代码,几分钟内就可以完成Kibana安装并启动Elasticsearch索引监测。

                主要功能

1、Elasticsearch无缝之集成。Kibana架构为Elasticsearch定制,可以将任何结构化和非结构化数据加入Elasticsearch索引。Kibana还充分利用了Elasticsearch强大的搜索和分析功能。

2、整合你的数据。Kibana能够更好地处理海量数据,并据此创建柱形图、折线图、散点图、直方图、饼图和地图。

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

4、让更多团队成员受益。强大的数据库可视化接口让各业务岗位都能够从数据集合受益

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

6、配置简单。Kibana的配置和启用非常简单,用户体验非常友好。Kibana自带web服务器,可以快速启动运行。

7、可视化多数据源。Kibana可以非常方便地把来自Logstash、BS-Hadoop、Beats或第三方技术的数据整合到Elasticsearch,支持的第三方技术包括Apache Flume、Fluentd等。

8、简单数据导出。Kibana可以方便地导出感兴趣的数据,与其它数据集合并融合后快速建模分析,发现新结果。

ELK工作原理

        logstash收集APPServer产生的log,并存放到Elasticsearch集群中,而kibana则从ES集群中查询数据生成图表,再返回给Browser

经过的步骤

1、将日志进行集中化管理(beats)

  • Packetbeat(搜集网络流量数据);
  • Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据);
  • Filebeat(搜集文件数据);
  • Winlogbeat(搜集 Windows 事件日志数据)

2、将日志格式化(logstash)

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

4、前端数据展示(kibana)

 使用场景

搭建elk

环境:

node1节点:192.168.37.101

node2节点:192.168.37.102

apache(web服务访问):192.168.37.105

我们需要在每台机器修改它的名字,好区分

hostnamectl set-hostname node1            #37.101
hostnamectl set-hostname node2            #37.102
hostnamectl set-hostname apache           #37.105

配置他们的映射文件(所有服务器)

[root@node1 ~]#vim /etc/hosts


....
192.168.37.101 node1
192.168.37.102 node2
192.168.37.105 apache

可以ping通 

 

 查看jdk环境(环境自带的环境即可,因为不是在实际生产中)

[root@node1 config]#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-5.5.0.rpmgz并解压

[root@node1 /opt]# ls
elasticsearch-5.5.0.rpm 
[root@node1 /opt]# rpm -ivh elasticsearch-5.5.0.rpm

修改配置文件


[root@node1 /etc/elasticsearch]# vim elasticsearch.yml

 

 查看一下我们所配置的文件

[root@node1 /etc/elasticsearch]# grep -v "^#" elasticsearch.yml
cluster.name: my-application
node.name: node-1
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 /etc/elasticsearch]# mkdir -p /data/elk_data

给属主属组权限

[root@node1 /etc/elasticsearch]# chown elasticsearch:elasticsearch /data/elk_data/

开启服务,查看9200端口是否开启

[root@node1 /etc/elasticsearch]# systemctl enable --now elasticsearch.service
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
[root@node1 /etc/elasticsearch]# ss -natp |grep 9200
LISTEN     0      128         :::9200                    :::*                   users:(("java",pid=71579,fd=243))

去真机验证node1、node2

 

查看集群的生命值

查看状态

                使用插件管理 

使用以上方式查看状态并不友好,可以通过 elasticsearch-head插件来直接管理 

安装Elasticsearch-head插件

Elasticsearch在5.0 版本后,Elasticsearch-head插件需要作为独立服务进行安装,需要使用npm.工具(Wodeas的包管理T具)安装。安装 Elasticsearch-head 需要提前安装好依赖软件node 和 phantomjs。
node:是一个基于 Chrome v8引擎的 JavaScript运行环境。

phantomjs:是一个基于websit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于webkit浏览器做的事情,它都可以做到。

root@node1 /etc/elasticsearch]# yum install gcc gcc-c++ make -y

###安装依赖环境

 上传node-v8.2.1.tar.gz到/opt

解压


[root@node1 /opt]# tar zxf node-v8.2.1.tar.gz

执行安装

[root@node1 /opt/node-v8.2.1]# ./configure

编译安装等待时间较长

[root@node2 /opt/node-v8.2.1]# make && make install -j2

--------------------------------------------安装phantomjs------------------------------------------------

解压 

root@node1 /opt]# tar -jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/

做一个软链接,让系统识别

[root@node2 /usr/local/src]# ln -s /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/* /usr/local/bin/

-------------------------------------------安装elasticsearch-head(两个节点上)-----------------------------

 

[root@node1 /opt]# tar zxvf elasticsearch-head.tar.gz  -C /usr/local/src/

安装npm


[root@node1 /usr/local/src/elasticsearch-head]# npm install

修改主配置文件

[root@node2 ~]# vim /etc/elasticsearch/elasticsearch.yml

 启动elasticsearch-head  启动服务器

必须在安装目录下启动服务,进程会读取该目录下的 gruntfile.js文件,否则可能会启动失败


[root@node1 /usr/local/src/elasticsearch-head]# npm run start &
[1] 118591
[root@node1 /usr/local/src/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 ~]#  curl -X PUT '192.168.37.101: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
}

刷新页面

 

 

 上面图可以看见索引默认被分片5个,并且有一个副本

------------------------------------ ELK Logstash 部署(在Apache 节点上操作)-----------------

Logstash一般部署在需要监控其日志的服务器。在本案例中,Logstash 部署在Apache服务器上,用于收集Apache服务器的日志信息并发送到Elasticsearch。

解压logstash

[root@apache /opt]# rpm -ivh logstash-5.5.1.rpm

做软链接

[root@apache /usr/share/logstash]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

                登录 Apache主机 做对接配置

对其他用户执行只读模式

[root@apache /usr/share/logstash]# chmod o+r /var/log/messages

[root@apache /usr/share/logstash]# ll /var/log/messages
-rw----r--. 1 root root 291885 Dec 30 08:10 /var/log/messages


添加配置文件


[root@apache /usr/share/logstash]# vim /etc/logstash/conf.d/system.conf

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

重启logstatsh

[root@apache /usr/share/logstash]# systemctl restart logstash.service

去真机测试

                安装kibana

在node1节点安装

上传kibana-5.5.1-x86_64.rpm 到/usr/local/src目录


[root@node1 /usr/local/src]# rpm -ivh kibana-5.5.1-x86_64.rpm

修改配置文件最后备份一份

root@node1 /etc/kibana]# cp kibana.yml kibana.yml.bak
[root@node1 /etc/kibana]# vim kibana.yml

 开启kibana

[root@node1 /etc/kibana]# systemctl start kibana.service
[root@node1 /etc/kibana]# systemctl enable kibana.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.

浏览器输入192.168.37.101:5601

加载后的页面

 

 首次登录创建一个索引 名字:system-*  ##这是对接系统日志文件
Index name or pattern   ###下面输入system-*

然后点下面的host旁边的add  会发现右面的图只有 Time  和host 选项了 这个比较友好

 

                对接Apache主机的Apache 日志文件(访问的、错误的)

[root@apache /etc/logstash/conf.d]# touch apache_log.conf
[root@apache /etc/logstash/conf.d]# vim apache_log.conf


input {
       file{
        path => "/usr/local/httpd/logs/access_log"
        type => "access"
        start_position => "beginning"
        }
       file{
        path => "/usr/local/httpd/logs/error_log"
        type => "error"
        start_position => "beginning"
        }

      }
output {
        if [type] == "access" {
        elasticsearch {
          hosts => ["192.168.37.101:9200"]
          index => "apache_access-%{+YYYY.MM.dd}"
          }
        }
        if [type] == "error" {
        elasticsearch {
          hosts => ["192.168.37.101:9200"]
          index => "apache_error-%{+YYYY.MM.dd}"
          }
        }
        }

 启动日志

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

访问192.168.37.101:9100会多能发现
apache_error-****    和 apache_access-****

 在http://192.168.37.101:5601/创建两个日志access和error日志

ps:创建之前要先访问一些apache哦,不然会没有记录的

 

 最后,因为没做什么页面它也是空的,是不是很方便啊!!!不要面对枯燥的代码,只需点点就好

 总结

        在配置文件的时候,千万要注意地址一定要写对 我apache之前是安装过的,也可以不需要安装yum install httpd 也是一样的,只不过看对路径

                本次所用到的软件包

链接:https://pan.baidu.com/s/1utAlomUz84Md0wr4FmbLKw 
提取码:xbzs

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐