ELK分布式日志平台搭建及其简单应用

柔情痞子 提交于 2020-03-05 23:31:34


作为运维人员,其价值不在于部署大量服务,而在于排错及服务性能优化,优化主要是考的是对服务配置及其参数的理解,而排错我们主要是借助日志文件,来完成的,早期我们借助sed、awk、grep三剑客在一般中小企业还是有很大的作用。但是在大企业的集群架构中,三剑客已经略显疲态,日志收集与处理的非常难,而且不方便。于是ELK分布式日志平台就应运而生!
大家可以用三剑客尝试模拟千万级别pv的日志分析,完全就是不可行的!百万级别的pv就已经很吃力了!

一、ELK简介

1、认识ELK

ELK并不是一款独立的软件服务,而是三个软件的统称,它们分别是Elasticserach、Logstash、Kibana。ELK主要用于对大量服务器的各种日志进行集中化管理,同时可以对日志进行分析。

  • Elasticsearch是基于JAVA语言开发的,是分布式存储、搜索引擎,底层是使用lucene检索机制,主要是用于集中化管理日志、对日志内容进行分析和统计,实时、快速展示结果,ES可单独使用,也可以结合Logstash、Kibana。
  • Kibana是基于Node.js框架语言开发的,主要是为Elasticsearch、Kibana提供web UI界面的,可以读取ES集群的日志数据,用户通过web界面可以轻松简单实现对日志的快速处理及查看。
  • Logstash是基于JAVA语言开发的,主要是用于收集客户端的日志数据:系统日志、内核日志、应用日志、安全日志、审计日志等;还可以对日志内容进行过滤,最终将日志发送给ES集群。

2、ELK架构图

在这里插入图片描述加入Redis队列后工作流程:

Logstash包含Index和Agent(shipper) ,Agent负责客户端监控和过滤日志,而Index负责收集日志并将日志交给ElasticSearch,ElasticSearch将日志存储本地,建立索引、提供搜索,kibana可以从ES集群中获取想要的日志信息。

3、ELFK架构

后面又出来了一个软件!
Filebeat:它是一个基于go语言编写的轻量级日志采集器,Filebeat属于beats家族6个成员之一,早期的ELK架构中使用Logstash收集、解析日志并且过滤日志,但是Logstash对CPU、内存、IO等资源消耗比较高,相比Logstash,Filebeat所占系统的CPU和内存几乎可以忽略不计;所以后面就出先了ELFK日志平台。

ELFK架构图

在这里插入图片描述ELFK工作流程:

使用FileBeat获取Linux服务器上的日志。当启动Filebeat时,它将启动一个或多个Prospectors (检测者),查找服务器上指定的日志文件,作为日志的源头等待输出到Logstash。

Logstash从FileBeat获取日志文件。Filebeat作为Logstash的输入input将获取到的日志进行处理,Logstash将处理好的日志文件输出到Elasticsearch进行处理。

Elasticsearch得到Logstash的数据之后进行相应的搜索存储操作。将写入的数据可以被检索和聚合等以便于搜索操作,最后Kibana通过Elasticsearch提供的API将日志信息可视化的操作。

二、ELK分布式日志平台搭建

我用docker起了两个Centos容器:
docker1: 172.17.0.2 Elasticsearch+kibana
docker2: 172.17.0.3 Logstash
注意:开的两个容器必须给–privileged超级权限!

搭建流程

1、在相应容器下载所需要软件

docker1

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.3.0-linux-x86_64.tar.gz
#安装jdk1.8.0
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"

docker2

wget https://artifacts.elastic.co/downloads/logstash/logstash-5.3.0.tar.gz
scp 172.17.0.2:/jdk-8u141-linux-x64.tar.gz /usr/local/

安装要点:

  • 凡是用JAVA语言写的软件,要想使用必须得要安装jdk。安装方法详见:

https://blog.csdn.net/weixin_44571270/article/details/102939666

  • ELK三个软件需要保持版本的高度一致!像我就安装的全是5.3.0版本的。另外jdk版本不能低于1.8.0。
2、安装Elasticsearch
#把ELK三个软件都移到各自容器的/usr/local/下
cd /usr/local
tar xvf elasticsearch-5.3.0.tar.gz
mv elasticsearch-5.3.0 elasticsearch
cd elasticsearch
vim /usr/local/elasticsearch/config/elasticsearch.yml #修改下面的参数

在这里插入图片描述

#启动elasticsearch,这个服务不能用root用户启动,只能使用普通用户启动它
useradd elasticsearch
chown —R elasticsearch:elasticsearch /usr/local/elasticsearch #为了避免该普通用户访问elasticsearch相关配置文件无权限,故授权!
su - elasticsearch
/usr/local/elasticsearch/bin/elasticsearch -d #启动elasticsearch
3、解决Elasticsearch启动报错

像上面这样配置!过一会儿后,你会发现elasticsearch进程并没有起来!接下来我们需要查看elasticsearch日志。

exit #从普通用户切回root用户
tail -n 50 /usr/local/elasticsearch/logs/

报错:
在这里插入图片描述解决:

vi /etc/sysctl.conf
vm.max_map_count=262144
sysctl -p
#注意上面这个配置文件是系统配置文件,如果你起容器的时候没给--privileged权限,这里就会报错,read only file system!

在这里插入图片描述
现在这种日志就说明已经成功启动了!

其他报错情况:
(1)SecComp功能不支持;

ERROR: bootstrap checks failed
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk;
因为Centos6不支持SecComp,而ES5.3.0默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。

解决方法:

在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

(2)内核参数设置问题;

max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
max number of threads [1024] for user [hadoop] is too low, increase to at least [2048]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决方法:

vim 	/etc/security/limits.conf 
 soft nofile 65536
 hard nofile 65536
 
vim 	/etc/security/limits.d/90-nproc.conf 
soft  nproc  2048

vim /etc/sysctl.conf
vm.max_map_count=655360
4、安装Kibana
tar xvf kibana-5.3.0-linux-x86_64.tar.gz
mv kibana-5.3.0-linux-x86_64 /usr/local/kibana/

修改kibana配置文件信息:

vim /usr/local/kibana/config/kibana.yml

指定监听端口:
在这里插入图片描述
指定监听网卡,监听所有网卡:
在这里插入图片描述
指定ES服务器的地址:
在这里插入图片描述启动命令:nohup /usr/local/kibana/bin/kibana &

5、安装Logstash
cd /usr/local
tar xvf logstash-5.3.0.tar.gz
mv logstash-5.3.0 logstash

注:这里就安装好了,至于启动logstash,启动它首先我们需要定义采集那些日志,在下面我们会做一个简单示例!

三、ELK收集标准输入日志,并在web界面显示

#创建收集日志配置目录;
mkdir  -p  /usr/local/logstash/config/etc/
cd /usr/local/logstash/config/etc/

创建ELK整合配置文件:vim stdin.conf,内容如下:

input {
    stdin { }
}
output {
    stdout {
        codec => rubydebug {}
    }
    elasticsearch {
        hosts => "172.17.0.2:9200"
    }
}

启动logstash采集标准输入日志:

/usr/local/logstash/bin/logstash  -f  /usr/local/logstash/stdin.conf

在这里插入图片描述
在这里插入图片描述
注:Logstash启动窗口中输入任意信息,会自动输出相应格式日志信息
达到上面这个效果了,之后在浏览器输入172.16.193.200:5601(这是我宿主机的ip,我是给虚拟机做了5601端口映射的)。
在这里插入图片描述创建成功后,再次点击Discover:
在这里插入图片描述标准输入日志获取成功,ELK日志平台搭建成功!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!