ELK(Elasticsearch,Logstash,Kibana)

15 Aug 2021

ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,Elasticsearch(ES),Logstash 和 Kibana。这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,故被简称为 ELK 协 议栈。

ELK官网:https://www.elastic.co/
ELK官网文档:https://www.elastic.co/guide/index.html
ELK中文手册:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
ELK中文社区:https://elasticsearch.cn/
ELK API :https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/travelansport-client.html

Elk整体架构

Kibana

Kibana 是一款基于 Apache 开源协议,使用 JavaScript 语言编写,为 Elasticsearch 提供分析和可视化的 Web 平
台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图。

Elasticsearch

Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在 全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。

主要特点

ES简介

Elasticsearch Single-Node Mode部署

Elasticsearch是一个分布式全文搜索引擎,支持单节点模式(Single-Node Mode)和集群模式(Cluster Mode)部署,一 般来说,小公司的业务场景往往使用Single-Node Mode部署即可。先以Single-Node Mode部署感受下ES,后续搭 建分布式集群深入学习。

Elasticsearch核心概念

Elasticsearch 集群部署

管理索引

Query DSL

https://www.elastic.co/guide/en/elasticsearch/reference/7.3/query-dsl.html

Elasticsearch提供了基于JSON的完整查询DSL(Domain Specific Language 特定域的语言)来定义查询。将查询 DSL视为查询的AST(抽象语法树),它由两种子句组成:

我们在使用ElasticSearch的时候,避免不了使用DSL语句去查询,就像使用关系型数据库的时候要学会SQL语法一 样。

Java API操作ES

官网说明
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.3/java-rest-overview.html

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.3/java-rest-high.html

Elasticsearch之原理剖析

Logstash

Logstash 是一个具有实时渠道能力的数据收集引擎。使用 JRuby 语言编写。其作者是世界著名的运维工程师乔丹西
塞 (JordanSissel)。

主要特点

它由三个主要部分组成

官网
https://www.elastic.co/guide/en/logstash/current/index.html

介绍

Logstash就是一个具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端;与此同时这 根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供里很多功能强大的滤网以满足你的各种应用场景。 是一个input filter output 的数据流。

安装Logstash

# 下载  
wget [https://artifacts.elastic.co/downloads/logstash/logstash-7.3.0.tar.gz](https://artifacts.elastic.co/downloads/logstash/logstash-7.3.0.tar.gz)  
  
#解压即可  
tar -zxvf logstash-7.3.0.tar.gz  

Input插件

https://www.elastic.co/guide/en/logstash/current/input-plugins.html

filter插件

Logstash之所以强悍的主要原因是filter插件;通过过滤器的各种组合可以得到我们想要的结构化数据。

grok正则表达式是Logstash非常重要的一个环节;可以通过grok非常方便的将数据拆分和索引
语法格式:

 (?<name>pattern)   
?<name>表示要取出里面的值,pattern就是正则表达式  

Output插件

日志分析平台实战

日志分析平台架构图

Nginx安装

1、安装git工具,安装wget下载工具

yum install wget git -y  
yum install gcc-c++ -y  

2 、下载nginx源码包

cd /usr/local/src  
wget http://nginx.org/download/nginx-1.17.8.tar.gz  
tar -zxvf nginx-1.17.8.tar.gz  
cd nginx-1.17.8  
yum install gcc zlib zlib-devel openssl openssl-devel pcre pcre-devel -y  

3、进入到nginx的源码目录下(编译nginx)

cd /usr/local/src/nginx-1.17.8  
./configure  
make && make install  

4、启动Nginx

Nginx配置文件路径:/usr/local/nginx/conf

cd /usr/local/nginx/   
#启动nginx   
/usr/local/nginx/sbin/nginx  

如果报错端口被占用,修改Nginx的默认端口

cd /usr/local/nginx/conf  
vim nginx.conf  
  
# 把默认端口修改为8080或者8888  
server{  
	listen 8080;  
	...  

5、验证nginx是否启动

 ps -ef | grep nginx  

查找nginx的访问日志

cd /usr/local/nginx/logs  
tail -f access.log  

浏览器访问nginx

http://192.168.0.200:8080  

6、修改日志格式为JSON格式

调整nginx产生的日志为json格式,减少Logstash的开销(虽然使用正则可以方便提取出字段,但是效率不高)

log_format json '{ "@timestamp": "$time_iso8601", '  
         '"remote_addr": "$remote_addr", '  
         '"remote_user": "$remote_user", '  
         '"body_bytes_sent": "$body_bytes_sent", '  
         '"request_time": "$request_time", '  
         '"status": "$status", '  
         '"request_uri": "$request_uri", '  
         '"request_method": "$request_method", '  
         '"http_referrer": "$http_referer", '  
         '"http_x_forwarded_for": "$http_x_forwarded_for", '  
         '"http_user_agent": "$http_user_agent"}';  

添加到nginx.conf中

重启nginx,验证日志格式

/usr/local/nginx/sbin/nginx -s reload  

Filebeat

Filebeat主要是为了解决Logstash工具比较消耗资源比较重的问题,因为Logstash是Java语言编写,所以官方推出了一些轻量级的采集工具,推出了Beats系列,其中使用比较广泛的是Filebeat。

官方地址
https://www.elastic.co/guide/en/beats/filebeat/7.3/index.html

Logstash读取Kafka

Kafka Input

https://www.elastic.co/guide/en/logstash/7.3/plugins-inputs-kafka.html

Kibana可视化

ES集群规划与调优

ES集群规划

ES集群调优策略

拉勾ELK日志平台中Elasticsearch实例节点数不到10个,考虑到资金投入、当前及未来一定时间内数据的增量情况等,研发和运维团队在竭尽所能的通过调优方式保证Elasticsearch正常高效运转。