秒懂!ELK日志分析系统

**

ELK日志分析系统简介

**Elasticsearch
是一个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。详细可参考 Elasticsearch 权威指南
Logstash
主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为 c/s 架构,client 端安装在需要收集日志的主机上,server 端负责将收到的各节点日志进行过滤、修改等操作在一并发往 Elasticsearch 上去。
Kibana
Kibana 可以为 Logstash 和 ElasticSearch 提供一个针对Elasticsearch的开源分析及可视化平台,通过各种图表进行高级数据分析及展示,可以帮助汇总、分析和搜索重要数据日志。

日志处理步骤
将日志进行集中化管理
将日志格式化( Logstash )并输出到Elasticsearch
对格式化后的数据进行索引和存储( Elasticsearch )
前端数据的展示( Kibana )

部署ELK日志分析系统
1、需求描述
配置ELK日志分析群集
使用Logstash收集日志
使用Kibana查看分析日志

Elasticsearch的核心概念
接近实时 :响应速度非常的快,从索引一个文档直到能够被搜索到只有一个轻微的延迟(通常是1s)
集群 :群集就是由一个或多个节点组织在一起,在所有的节点上存放用户数据,并一起提供索引和搜索功能。
节点 :是指一台单一的服务器,多个节点组织为一个群集,每个节点都存储数据并参与群集的索引和搜索功能。
索引:类似于关系型数据库中的“库”,当索引一个文档后,就可以使用elasticsearch搜索到该文档,也可以简单地将索引理解为存储数据库的地方,可以方便地进行全文索引。
●索引(库)→>类型(表)→>文档(记录)·
分片和副本:集群索引中可能由多个分片构成,并且每个分片可以拥有多个副本,将一个单独的索引分为多个分片,可以处理不能在单一服务器上运行的大型索引.

Elasticsearch部署
设置主机名

[root@promote ~]# hostnamectl set-hostname node1
[root@promote ~]# su
[root@node1 ~]# vi /etc/hosts
192.168.10.10 node1
192.168.10.20 node2

两节点安装Elasticsearch相关软件包

[root@node1 ~]# ls   ##查看rpm包
……  elasticsearch-5.5.0.rpm 
[root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm   ##rpm安装
[root@node1 ~]# systemctl daemon-reload    ##重载系统参数
[root@node1 ~]# systemctl enable elasticsearch.service   ##开机自启

修改ES配置文件

[root@node1 ~]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# cp -p elasticsearch.yml elasticsearch.yml-bak  ##带属性备份配置文件
[root@node1 elasticsearch]# vim 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  
                      ##内存加固,true表示允许将溢出的内存保存到swap缓存中,false则表示不允许
'55行//'  network.host: 0.0.0.0       ##监听地址,写任意网段
'59行//'  http.port: 9200  ##开启9200端口
'68行//'  discovery.zen.ping.unicast.hosts: ["node1", "node2"]  ##群集内部通讯使用的是非广播包的形式,”[ ]”内写节点名称
[root@node1 elasticsearch]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml 
                    ##可以反向过滤出我们配置的信息,默认文件内所有信息都被注释掉了
cluster.name: my-elk-cluster
node.name: node1
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"]

创建数据目录,并改变属性,启动Elasticsearch

[root@node1 ~]# mkdir -p /data/elk_data   ##创建数据存放目录
[root@node1 ~]# id elasticsearch  ##安装时,系统自动创建了elasticsearch用户,可以使用id命令查看 
          
uid=990(elasticsearch) gid=985(elasticsearch) groups=985(elasticsearch)
[root@node1 ~]# chown elasticsearch.elasticsearch /data/elk_data  ##改变属性
[root@node1 elasticsearch]# systemctl start elasticsearch  ##启动elasticsearch服务
[root@node1 elasticsearch]# netstat -anupt |grep 9200   ##启动较慢,可能要等几秒
tcp6       0      0 :::9200                 :::*                    LISTEN      38188/java  

ES访问测试

192.168.100.110:9200 节点1 node1
在这里插入图片描述

192.168.100.100:9200 节点2 node2在这里插入图片描述
查看集群节点状态信息
http://192.168.100.100:9200/_cluster/state?pretty
在这里插入图片描述
安装elasticsearch-head插件
首先安装node组件依赖包

[root@node1 elasticsearch]# yum -y install gcc gcc-c++ make
[root@node2 ~]# ls
 node-v8.2.1.tar.gz  
……省略部分
[root@node1 ~]# tar zxvf node-v8.2.1.tar.gz  ##解压
[root@node1 ~]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure   
[root@node1 node-v8.2.1]# make -j3 && make install  

安装phantomjs前端框架

[root@node1 ~]# ls
……省略部分
  phantomjs-2.1.1-linux-x86_64.tar.bz2 
[root@node1 ~]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 ~]# cd phantomjs-2.1.1-linux-x86_64/bin/   ##/bin目录下有执行脚本
[root@node1 bin]# ls
phantomjs
[root@node1 bin]# cp phantomjs /usr/local/bin/

安装elasticsearch-head,数据的可视化工具

[root@node1 ~]# ls
……省略部分
 elasticsearch-head.tar.gz 
[root@node1 ~]# tar zxvf elasticsearch-head.tar.gz
[root@node1 ~]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install  ##npm是一种前端工具

修改ES配置文件

[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
http.cors.enable: true     ##在末尾插入这两行,自动开启
http.cors.allow-origin: "*"     ##允许任意域名访问
[root@node1 ~]# systemctl restart elasticsearch.service

启动elasticsearch-head(npm方式启动)

[root@node1 ~]# cd /root/elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start &   ##使用npm后台启动
[root@node1 elasticsearch-head]# netstat -lnuapt |grep 9100  
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN     

部署Logstash日志采集器

[root@logstash ~]# ls   ##查看相关软件包
……省略部分
 logstash-5.5.1.rpm
[root@logstash ~]# rpm -ivh logstash-5.5.1.rpm ##安装Logstash软件包
[root@logstash ~]# rpm -qc logstash   ##查看logstash配置文件位置
/etc/logstash/jvm.options
/etc/logstash/logstash.yml
/etc/logstash/startup.options
[root@logstash ~]# systemctl start logstash.service   ##开启logstash日志收集器
[root@logstash ~]# systemctl enable logstash.service   ##开机自启
[root@logstash ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/  ##建立软连接

将logstash的信息输出到Elasticsearch

[root@logstash ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.100.10:9200"] } }'
 ……省略部分
13:23:21.475 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
13:23:21.568 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
    ##提示成功开启了logstash的接口,接下来就可以输入数据到ES中显示了
www.baidu.com   ##插入数据

访问ES验证对接情况Elasticsearch 192.168.100.100:9100(在生产环境中一般都是访问Keepalived的VIP地址)

Logstash收集对接ES

[root@logstash ~]# chmod o+r /var/log/messages   ##授予系统日志给其他用户读取的权限
[root@logstash ~]# cd /etc/logstash/conf.d/   ##进入/etc/logstash/conf.d/下创建配置文件
[root@logstash conf.d]# vi system.conf   ##编写配置,可以编写多个,每个采集一大类日志,配置文件名称自定义,但是必须要以 .conf 结尾
input {
        file{           ##输入点是文件
        path => "/var/log/messages"     ##采集的文件位置
        type => "system"        ##设置标签
        start_position => "beginning"     ##采集开始位置,从开头开始
        }
}

output {
        elasticsearch{        ## 输出点是ES
        hosts => ["192.168.10.10:9200"]   ##ES的主机地址及端口,生产环境用的是VIP地址,而不是单个节点地址
        index => "system-%{+YYYY.MM.dd}"     ##ES索引的形式,‘-年月日’的形式
        }
}

重启logstash服务

[root@logstash ~]systemctl restart logstash

访问 192.168.100.100:9100
在这里插入图片描述
部署Kibana
在node1上部署

[root@node1 ~]# cd /usr/local/src/   ##Kibana的rpm包直接放在了src/目录下
[root@node1 src]# ls   ##查看软件包
kibana-5.5.1-x86_64.rpm
[root@node1 src]# rpm -ihv kibana-5.5.1-x86_64.rpm
[root@node1 src]# cd /etc/kibana/
[root@node1 kibana]# cp -p kibana.yml kibana.yml.bak   ##保留属性备份配置文件
[root@node1 kibana]# vim kibana.yml
2 行//  server.port: 5601   ##开启5601端口
7 行//  server.host: "0.0.0.0"   ##设置监听主机地址为0.0.0.0,任意地址
21行//  elasticsearch.url: "http://192.168.10.10:9200"   ##指定ES的访问地址,真是环境为VIP地址
30行//  kibana.index: ".kibana"    ##开启Kibana索引
[root@node1 kibana]# systemctl restart kibana.service 

访问Kibana 192.168.100.100:5601
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值