初识ELK

ELK是用来做业务日志处理的, 日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
 
通常,日志被分散在储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。通过我们需要对日志进行集中化管理,将所有机器上的日志信息收集、汇总到一起。完整的日志数据具有非常重要的作用:
 
开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成:
 
1:Elasticsearch是一个基于Lucene的开源分布式搜索服务器,特点是:分布式,零配置,自动发现,索引分片, 索引副本机制,restful风格接口,多数据源,自动搜索负载等, 它提供了一个分布式多用户能力的全文搜索引擎, Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
 
2:Logstash是一个完全开源的工具,是用来对日志进行收集、过滤、分析,支持大量的数据获取方法,并将存储供以后使用比如搜索, 说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作再一并发往elasticsearch上去。
 
3:Kibana是一个基于浏览器页面的Elasticsearch前端展示工具,也是开源免费的, Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
 
 
 

 
下面用如下的架构来搭建一套日志收集系统~
 
 
 
环境: Centos6.7两台
IP:192.168.75.64 安装:elasticsearch、logstash、Kibana、Nginx、Http、Redis
       192.168.75.61 安装:logstash
 
首先针对75.64:
环境需求:jdk要在1.8以上
这里已经升级过了,不再赘述...
 
安装elasticsearch的yum源的密钥(这个需要在所有服务器上都配置)
 
配置elasticsearch的yum源
[root@VM-75-64 elasticsearch]# cat /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
gpgcheck=1
enabled=1
autorefresh=1
type=rpm-md
 
#这里的地址直接访问是不通的,但是配在repo里可以用!
 
安装elasticsearch
yum install -y elasticsearch
 
创建elasticsearch的data目录:
mkdir -p /data/elasticsearch
chown elasticsearch:elasticsearch /data/elasticsearch/ -R
 
修改elasticsearch的配置文件:
cd /etc/elasticsearch/
可以看到有三个配置文件:
vim elasticsearch.yml
这里需要修改的地方为:
cluster.name: test-elk            #集群名称
node.name: elk-1                    #节点名称
path.data: /data/elasticsearch    #数据路径
path.logs: /var/log/elasticsearch    #日志路径
bootstrap.memory_lock: true        #配置内存使用用交换分区
network.host: 0.0.0.0                    #监听网络地址
http.port: 9200                            #监听端口
增加新的参数,这样head插件可以访问es (5.x版本,如果没有可以自己手动加)
http.cors.enabled: true
http.cors.allow-origin: "*"
 
启动elasticsearch服务:
/etc/init.d/elasticsearch start                #这里界面是出现OK了,但是ps并没有发现java进程,同时tail日志发现大量的错误,这里集中整理下:
报错总共有下面几条:
[4] bootstrap checks failed
bootstrap.system_call_filter: false
[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
[2]: memory locking requested for elasticsearch process but memory is not locked
[3]: max number of threads [1024] for user [elasticsearch] is too low, increase to at least [2048]
[4]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
看起来一共是四条,其中上面还有很长一段的警告:
这段警告是因为系统问题,可以忽视~
针对上面的四条报错,这里逐一分析解决点:
1(【1】):vim /etc/security/limits.conf 配置如下:
*        soft   nproc  65536
*        hard   nproc  65536
*        soft   nofile 65536
*        hard   nofile 131072
2(【2】):vim /etc/security/limits.conf 新添加两行字段:
*        soft memlock unlimited
*       hard memlock unlimited
3(【3】):vim /etc/security/limits.d/90-nproc.conf    修改配置:    #这里的配置文件会覆盖/etc/security/limits.conf下的配置,所以要注意下!
*          soft    nproc     4096
4(【4】):修改elasticsearch.yml配置文件,在 ----------------------------------- Memory -----------------------------------下添加一条置:
bootstrap.system_call_filter: false
这是因为: Centos6不支持SecComp,而ES5.2.0默认bootstrap.system_call_filter为true
 
此时再重启elasticsearch:
/etc/init.d/elasticsearch start
观察日志发现:
成功起来了!!!!
 
起来之后可以看到端口在被监听中:
 
用curl访问本地http端口:
 
那么,下面就是如何与elasticsearch在web界面交互的问题了。我们通过一个插件;
安装elasticsearch-head插件
安装docker镜像或者通过github下载elasticsearch-head项目都是可以的,1或者2两种方式选择一种安装使用即可
因为这里系统是6.7的,dockr跑不起来,所以只能选择git安装了~
yum install -y npm 
#关于npm的介绍:
  • 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
  • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
  • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
#这里在首次使用上面指令的时候提示command not found!所以要先安装呢git~
yum install -y git
git clone git://github.com/mobz/elasticsearch-head.git                  #此操作会在当前目录下生成一个elasticsearch-head目录,所以还是先想好把这哥目录放在哪,我是放在/data/下,跟elasticsearch的数据目录同层~
cd elasticsearch-head
npm install           #这里在安装的时候依旧会报错:node npm install Error: CERT_UNTRUSTED,原因是ssl验证不通过,此时执行指令:npm config set strict-ssl false,关闭ssl验证,再次执行安装操作!应该会顺利安装上~
npm run start &        #在后台开起来~
检测端口的监听情况~
他默认监听9100端口~
我们在web尝试访问一下:
有的~完美~(注意防火墙!)
在集群概览中,原本是没有任何node节点的,需要从红框处输入IP:端口区连接,默认是localhost,这里需要手动输入node节点的IP~
节点收到了,下面就是如何在这个界面展示日志了~
 
说到日志展示,首先想到的是,日志的收集~收集?那就要用到logstash了!
logstash安装:
官方安装手册:
下载yum源的秘钥认证:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch    #这步之前在安装elasticsearch的时候就安装过了~
yum安装logstash:
yum install -y logstash
安装完毕之后,你可以看看logstash的安装路径,rpm -ql,不过不建议,因为目录是在太多了,那就find一下~
find / -name logstash
你会看到/usr/share下面有很多logstash的安装目,那就对了,默认就是安装在/usr/share下的~
建立软连接:
ln -s /usr/share/logstash/bin/logstash /bin/
执行logstash的命令:
logstash -e 'input { stdin { } } output { stdout {} }'
运行成功后就能在交互式界面输入内容并自动输出了!
但是这里在执行上面的指令的时候,它提示我找不到配置文件的等错误~不过看日志有提示已经成功创建:
 
但交互式界面的提示实在是难看,于是:
我在安装目录按照他的要求创建了config目录,并且把原本在
下的log4j2.properties logstash.yml 这两个文件复制到config下,好了~不报错了~
很奇怪~
同同时你在执行find / -name logstash 的时候,你会发现还有个logstash文件:
所以这个是logstash的配置指向文件~
 
接着往下看,测试阶段就不说了,直接到配置阶段吧:
上图的红框就是logstash的配置文件的存放处,这里原本是空的,需要手动创建!
 
配置文件就是这里的elk.conf:
[root@VM-75-64 conf.d]# cat elk.conf
input {
  file {
        path => "/var/log/messages"            #定义日志文件的路径
        type => "system"                                #类型
        start_position => "beginning"        
        }
 
  file {
        path => "/var/log/secure"
        type => "secure"
        start_position => "beginning"
        }
  file {
        path => "/var/log/nginx/error.log"
        type => "nginx"
        start_position => "beginning"
        }
}
 
output {
  if [type] == "system" {                                  #这里做的判断,因为每个类型都要有自己的一套output配置!
  elasticsearch {
        hosts => ["192.168.75.64:9200"]            #输出到哪里的elasticsearch
        index => "75-64-system"                       #index,索引,待会在插件中需要用到的表示,每个日志对应自己的索引。
                }
        }
  if [type] == "secure" {
  elasticsearch {
        hosts => ["192.168.75.64:9200"]
        index => "75-64-secure"
                }
        }
  if [type] == "nginx" {                                    #这里的nginx是后面进阶的内容,这里logstash的配置是类似的,但是在nginx的配置文件里面需要对日志格式化多修改!后面再说!
  elasticsearch {
        hosts => ["192.168.75.64:9200"]
        index => "75-64-nginx"
                }
        }
}
 
配置文件就是在这样,下面我们把logstash开起来:
logstash -f elk.conf &            #注意这里后面的& 表示要在后台运行,不然会停留在交互式界面出不来!
这里通过tail -f 日志文件发现已经成功创建索引并分配分片了!
好,现在我们去看head插件:
你会发现,这里出现了在配置文件里配置的索引,并且集群信息中,只有一半是OK的,另一半是灰色的,这是elasticsearch默认的分片分配方式,他会为每个主分片自动分配一个副分片,用来做高可用的,那么,在本次实验中的单机ES,没有组成集群,因此在同一台机器上,只有主分片是可用的,副分片不可用。
 
 
在上面的例图中,我们就能够针对某个索引做数据搜索了!
这里有个点要注意的是,从你配置好配置文件,并启动logstash,来到head插件,发现并没有出现你所配置的索引,那么没问题,只是你所配置的路径日志文件没有输出,并不是其他的问题,你可以尝试可以调整让对应的日志文件有输出,再回到head插件的页面查看!
 
Kibana:
到这里,日志的收集部分也算是OK了,并且能够通过配置文件去收集相关的系统日志,并展示到插件head中来,但我们ELK的终极页面并不是elasticsearch-head,而是K(Kibana):
 
下载kibana的tar.gz的软件包:
解压kibana的tar包:
tar -xzf kibana-5.4.0-linux-x86_64.tar.gz
mv kibana-5.4.0-linux-x86_64 /usr/local
创建kibana的软连接:
ln -s /usr/local/kibana-5.4.0-linux-x86_64/ /usr/local/kibana
编辑kibana的配置文件:
vim /usr/local/kibana/config/kibana.yml
需要修改的配置如下:
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://192.168.75.64:9200"
kibana.index: ".kibana"
我只打开了这几个字段!
 
开启进程:
这里我们依旧用二进制文件启动:
/usr/local/kibana/bin/kibana &            #依旧是后台启动
 
之后交互式界面会出现少许日志,回车中断即可:
 
 
我们在界面访问一下:
如上界面:在红框处填写之前编辑的index值,下面就能搜索到,并且允许创建index pattern!
 
创建index之后,看上图的四个红框处:
discover,索引列表,你所要搜索的字段,你所要搜索的日志的时间范围!
四个关键点!
 
好,到这里kibana部分的基础内容你要知道了~并且我们可以利用ELK对系统的基本系统以及业务日志做一个收集和过滤了!!!
 
以上,共勉!
 
 
posted @ 2020-07-31 10:00  一个运维  阅读(423)  评论(0编辑  收藏  举报