ELK日志分析日志
一:ELK日志分析系统简介
1.1 一般的日志服务器
- 提高安全性
- 集中存放日志
- 缺陷:对日志的分析困难
1.2 ELK日志分析系统
-
Elasticsearch
-
Logstash
-
Kibana
-
- Logstash部署至服务主机,对各个服务的日志进行采集、过滤、推送。
- Elasticsearch存储Logstash传送的结构化数据,提供给Kibana。
- Kibana提供用户UIweb页面进行,数据展示和分析形成图表等。
- logs 泛指,各种日志文件以及日志信息:windows,negix,tomcat,webserver等等。
1.3 日志处理步骤
1.将APP servers的日志进行集中化管理到Logstash agent
2.将日志格式化(Logstash)并输出到Elasticsearch cluster
3.对格式化后的数据进行索引和存储(Elasticsearch)
4.前端数据的展示(Kibana)
5.可以在线查看界面化展示
Logstash 收集APP server产生的log,然后存放到Elasticsearch集群节点中
kibana从Elasticsearch集群节点中查询数据生成图表,再返回给Brower
二:Elasticsearch介绍
2.1 Elasticsearch概述
- 提供了一个分布式多用户能力的全文搜索引擎
- 是一个基于Lucene的搜索服务器
- 基于restful web接口
- 使用java开发
- 作为apache许可条款下的开放源码发布,是第二流行的企业搜索引擎
- 被设计用于云计算中,能够达到实时搜索、稳定、可靠、快速、安装实用方便的需求
2.2 Elasticsearch的概念
- 接近实时(NRT)
Elasticsearch是一个接近即时的搜索平台,从索引一个文档知道这个文档能够被搜索到的过程中有一个轻微的延迟(通常是1S)
- 集群(cluster)
由一个及其以上的节点组织在一起,它们共同持有整个数据,并一起提供索引和搜索功能
其中一个节点为主节点,这个节点是可以通过选举产生,并提供跨节点的联合索引和搜索的功能
集群有一个唯一标识的名字,默认是elaticsearch
集群名字很重要,每个节点是基于集群名字加入到其集群中;因此,要确保集群的唯一性,在不同环境中使用不同的集群名字
一个集群只可以有一个节点,建议在配置elasticsearch时,配置成集群模式
- 节点(node)
节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能
像集群一样,节点之间可是通过名字来标识区分,默认是在节点启动时随机分配的字符名
当然,你可以自己定义,该名字很重要,起到在集群中定位到对应的节点
节点可以通过指定集群名字来加入到集群中,默认情况下,每个节点被设置成加入到elasticsearch集群。
如果启动了多个节点,假设能够自动发现对方,他们将会自动组建一个名为elastisearch的集群
- 索引(index)——索引(库)——类型(表)——文档(记录)
一个索引就是一个拥有几分相似特征的文档的集合
比如说,你可以有一个客户数据的索引、一个产品目录的索引、还有一个订单数据的索引
一个索引用一个名字来标识(必须全部是小写字母组合),并且当我们要对相应的索引中的文档进行索引、收缩、更新和删除的时候,都要用到这个名字
在一个集群中,可以定义多个索引
- 类型(type)
在一个索引中,你可以定义一种或多种类型
一个类型是你的索引的一个逻辑上的分类分区,其寓意完全由你来定义
通常,会为具有一组共同字段的文档定义一个类型
比如:我们假设运营一个博客平台并且将所有的数据存储到一个索引中,在这个索引中,你可以为用户数据定义一个类型,为博客数据定义一个类型,也可以为评论数据定义另一个类型
- 文档(Document)
一个文档是一个可被索引的基础信息单元
比如:你可以拥有一个客户的文档,某一个产品的文档;文档以JSON(Javascript Object Notation)格式来表示,json是一个通用的互联网数据交互模式
在一个index/type内,你可以存储任意多的文档
注意:虽然一个文档在物理上位于一个索引内,但是实际上一个文档必须在一个索引内可以被索引和分配一个类型
- 分片和副本 (shards & replicas)
在实际情况下,索引存储的数据可能超过单个节点的硬件设置
比如十亿个文档需要1TB空间存储,可能不适合存储在单个节点上,读写被限制在单个节点;从单个节点搜索请求也太慢了
为了解决这个问题,elasticsearch集群提供将索引分割开,进行分片的功能
当创建索引时,可以定义想要分片的数量
每一个分片就是一个全功能的独立的索引,可以位于集群中的任何节点上
2.3 分片的两个最主要原因:
1.可以进行水平分割横向扩展,增大存储量
2.分布式并行跨分片操作,提高性能和吞吐量
分布式分片的机制和搜索i请求的文档如何汇总由elasticsearch控制,这些对用户来说是透明的
网络问题等其他不可控因素可以在任何时候不期而至,为了集群的健壮性,可以做一个故障切换机制,无论出现何种故障以防止分片或者节点不可用,为此,elasticsearch可以将索引分片复制一份或者多分,这被称之为分片副本
2.4 开启分片副本的主要原因
1.高可用性,以应对分片或者节点故障,处于这个原因,分片副本要在不同节点上
2.提高IO性能,增大吞吐量,搜索可以并行在所有副本执行
总之,每个索引可以被分成多个分片,一个索引也可以被复制0次或者多次
一旦复制了,每个索引就有了主分片(可以作为复制源的原始分片)和复制分片(主分片的拷贝)之分
分片和副本的数量可以在索引创建的时候指定,在索引创建之后,你可以在任何时候动态改变副本的数量,但是你事后无法改变分片的数量
默认情况下,Elasticsearch中的每个索引被分片为5个主分片和1个副本,这意味着,如果你的集群中至少有两个节点的情况下,你的索引将会有5个主分片和另外5个副本分片(1个完全拷贝),这样的话每个索引总共就有10个分片
三:Logstash介绍
3.1 Logstash概述
- 一款强大的数据处理工具,可以实现数据传输、格式处理、格式化输出
- 工作思路:数据输入(collect)、数据加工(如过滤、改写等enrich)以及数据输出(transport)
- 由LRuby语言编写,基于消息(message-based)的简单架构,并运行在Java虚拟机(JVM)上。
- 不同于分离的代理端(agent)或主机端(server),Logstash可配置单一的代理端(agent)与其他开源软件结合,以实现不同的功能
3.2 Logstash主要组件
- Shipper:日志收集
负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来
通常,远程代理端(agent)只需要运行这个组件即可
- Indexer:日志存储
负责接受日志并写入到本地文件
- Broker:日志hub
负责链接多个shipper和对应数目的indexer
- Search and Storage
允许对事件进行搜索和存储
- Web Interface
基于web的展示界面
以上组件在lLogstash架构中可以独立部署,因此提供了很好的集群扩展性.
-
Logstash由input、filter和output三部分组成,
input负责从数据源提取数据,
filter负责解析、处理数据,
output负责输出数据,每部分都有提供丰富的插件
3.3 Logstash主机分类
- 代理主机(agent):作为事件的传递者(shipper),将各种日志数据发送到中心主机;只需要运行logstash代理程序
- 中心主机(central host):可运行包括中间转发器(broker)、索引器(indexer)、搜索和存储器(search & storage)、web界面端(web interface)在内的各个组件,以实现对日志数据地接收、处理和存储
四:Kibana介绍
4.1 Kibana概述
- 一个针对Elasticsearch的开源分析及可视化平台
- 搜索、查看存储在Elasticsearch索引中的数据
- 通过各种图标进行高级数据分析及展示
- 让海量数据更容易理解
- 操作简单,基于浏览器地用户界面就可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态
- 设置安装Kibana非常简单,无需编写代码,几分钟内就可以完成Kibana安装并启动Elasticsearch监测
4.2 Kibana主要功能
- Elasticsearch无缝之集成。Kibana架构为Elasticsearch定制,可以将任何结构化和非结构化加入Elasticsearch索引,Kibana还充分利用了Elasticsearch强大的搜索和分析功能
- 整合数据,复杂数据分析;根据海量数据创建柱形图、折线图、三代泥土、直方图、饼图和地图;提升了Elasticsearch地分析能力,更够更加智能化地分析数据,执行数学转化并且根据要求对数据切割分块
- 让更多团队成员受益;强大的数据可视化让各个业务岗位都可以直观了解数据
- 接口灵活,分享更容易;使用Kibana可以更加方便地创建保存和分享数据,并将可视化数据快速交流
- 配置简单,可视化多数据源;Kibana地配置和启动非常简单,用户体验友好,Kibana自带web服务器,可以快速运行;kibana可以非常方便地把来自logstash、ES-hadoop、Beats或第三方技术整合到Elasticsearch,支持地第三方技术包括apacheflume、fluentd等
- 简单数据导出;Kibana可以方便地导出感兴趣地数据,与其他数据融合后快速建模分析,发现新结果
五:实操演示
三台centos7服务器,配置安装ELK日志分析系统
安装集群方式,两个Elasticsearch节点,并监控apache服务器日志
主机名 | IP地址 | 安装软件 |
---|---|---|
node1 | 192.168.100.140 | Elasticsearch 、Kibana |
node2 | 192.168.100.150 | Elasticsearch |
apache | 192.168.100.160 | Logstash 、apahce |
5.1: 配置环境
-
#配置主机名 hostnamectl set-hostanme node1 ##192.168.100.140 hostnamectl set-hostname node2 ##192.168.100.150 hostnamectl set-hostname apache ##192.168.100.160 #关闭防火墙和SElinux安全性功能 systemctl stop firewalld setenforce 0 #查看java环境 [root@node1 elk]# java -version openjdk version "1.8.0_181" [root@node2 ~]# java -version openjdk version "1.8.0_181" #在node1和node2中做地址映射 vi /etc/hosts 192.168.100.140 node1 192.168.100.150 node2
5.2: 部署elasticsearch软件(node1和node2都需要安装)
-
配置node1
1、安装elasticsearch—rpm包 [root@node1 ~]# mount.cifs //192.168.1.150/redhat7 /mnt Password for root@//192.168.1.150/redhat7: ****** [root@node1 elk]# ls elasticsearch-5.5.0.rpm logstash-5.5.1.rpm elasticsearch-head.tar.gz node-v8.2.1.tar.gz kibana-5.5.1-x86_64.rpm phantomjs-2.1.1-linux-x86_64.tar.bz2 [root@node1 elk]# pwd /mnt/elk [root@node1 ~]# cd /opt [root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm ##安装 2、加载系统服务 [root@node1 opt]# systemctl daemon-reload [root@node1 opt]# systemctl enable elasticsearch.service ##永久启动elasticsearch服务 3、更改elasticsearch主配置文件 [root@node1 opt]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak [root@node1 opt]# vim /etc/elasticsearch/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 ####不在启动的时候锁定内存 55)network.host: 0.0.0.0 ####提供服务绑定的IP地址,0.0.0.0代表所有地址 59)http.port: 9200 ####侦听端口为9200 68)discovery.zen.ping.unicast.hosts: ["node1", "node2"] ####集群发现通过单播实现 [root@node1 opt]# 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"] 4、创建数据存放路径并授权 [root@node1 ~]# mkdir -p /data/elk_data [root@node1 ~]# chown elasticsearch:elasticsearch /data/elk_data/ ##设置日志文件的属性 [root@node1 etc]# id elasticsearch "安装rpm包后自带用户" uid=987(elasticsearch) gid=981(elasticsearch) 组=981(elasticsearch) 5、启动elasticsearch是否成功开启 [root@node1 ~]# systemctl start elasticsearch.service [root@node1 ~]# netstat -natp | grep 9200 tcp6 0 0 :::9200 :::* LISTEN 37295/java [root@node1 ~]#
-
配置node2
1、安装elasticsearch—rpm包 [root@node2 ~]# mount.cifs //192.168.1.150/redhat7 /mnt Password for root@//192.168.1.150/redhat7: ****** [root@node2 ~ ]# cd /mnt/elk [root@node2 elk]# ls elasticsearch-5.5.0.rpm logstash-5.5.1.rpm elasticsearch-head.tar.gz node-v8.2.1.tar.gz kibana-5.5.1-x86_64.rpm phantomjs-2.1.1-linux-x86_64.tar.bz2 [root@node1 elk]# pwd /mnt/elk [root@node2 ~]# cd /opt [root@node2 opt]# rpm -ivh elasticsearch-5.5.0.rpm ##安装 2、加载系统服务 [root@node2 opt]# systemctl daemon-reload [root@node2 opt]# systemctl enable elasticsearch.service ##永久启动elasticsearch服务 3、更改elasticsearch主配置文件 [root@node2 opt]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak [root@node2 opt]# vim /etc/elasticsearch/elasticsearch.yml 17)cluster.name: my-elk-cluster ####集群名字 23)node.name: node2 ####节点名字 33)path.data: /data/elk_data ####数据存放路径 37)path.logs: /var/log/elasticsearch/ ####日志存放路径 43)bootstrap.memory_lock: false ####不在启动的时候锁定内存 55)network.host: 0.0.0.0 ####提供服务绑定的IP地址,0.0.0.0代表所有地址 59)http.port: 9200 ####侦听端口为9200 68)discovery.zen.ping.unicast.hosts: ["node1", "node2"] ####集群发现通过单播实现 [root@node2 opt]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml cluster.name: my-elk-cluster node.name: node2 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"] 4、创建数据存放路径并授权 [root@node2 ~]# mkdir -p /data/elk_data [root@node2 ~]# chown elasticsearch:elasticsearch /data/elk_data/ ##设置日志文件的属性 [root@node2 etc]# id elasticsearch "安装rpm包后自带用户" uid=987(elasticsearch) gid=981(elasticsearch) 组=981(elasticsearch) 5、启动elasticsearch是否成功开启 [root@node2 ~]# systemctl start elasticsearch.service [root@node2 opt]# netstat -natp | grep 9200 tcp6 0 0 :::9200 :::* LISTEN 10640/java [root@node1 ~]# #直接访问 192.168.100.140:9200 192.168.100.150:9200 #查看node1和node2的健康信息 192.168.100.140:9200/_cluster/health?pretty 192.168.100.150:9200/_cluster/health?pretty #查看集群状态信息 192.168.100.140:9200/_cluster/state?pretty 192.168.100.150:9200/_cluster/state?pretty
-
查看node1和node2的健康信息
注:由于通过上面的信息查看elasticsearch的集群信息,比较麻烦,所以下面使用elastcsearch-head插件来视图化管理集群
5.3: 部署elasticsearch-head插件(node1和node2都需要安装)
-
配置node1
#编译安装node组件依赖包##耗时比较长 [root@node1 opt]# yum install gcc gcc-c++ make -y ##安装编译工具 [root@node2 ~ ]# cd /mnt/elk [root@node2 elk]# ls elasticsearch-5.5.0.rpm logstash-5.5.1.rpm elasticsearch-head.tar.gz node-v8.2.1.tar.gz kibana-5.5.1-x86_64.rpm phantomjs-2.1.1-linux-x86_64.tar.bz2 [root@node1 elk]# tar xzvf node-v8.2.1.tar.gz -C /opt [root@node1 elk]# cd /opt/node-v8.2.1/ [root@node1 node-v8.2.1]# ./configure [root@node1 node-v8.2.1]# make -j4 [root@node1 node-v8.2.1]# make install #安装phantomjs(前段框架显示)#### 上传软件包到/usr/local/src/ [root@node1 node-v8.2.1]# cd /mnt/elk [root@node1 elk]# ls elasticsearch-5.5.0.rpm logstash-5.5.1.rpm elasticsearch-head.tar.gz node-v8.2.1.tar.gz kibana-5.5.1-x86_64.rpm phantomjs-2.1.1-linux-x86_64.tar.bz2 [root@node1 elk]# tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src [root@node1 elk]# cd /usr/local/src [root@node1 src]# ls phantomjs-2.1.1-linux-x86_64 [root@node1 src]# cd phantomjs-2.1.1-linux-x86_64/bin [root@node1 bin]# cp phantomjs /usr/local/bin #安装elasticsearch-head(支持插件视图化管理集群)### [root@node1 node-v8.2.1]# cd /mnt/elk [root@node1 elk]# ls elasticsearch-5.5.0.rpm logstash-5.5.1.rpm elasticsearch-head.tar.gz node-v8.2.1.tar.gz kibana-5.5.1-x86_64.rpm phantomjs-2.1.1-linux-x86_64.tar.bz2 [root@node1 elk]# tar xzvf elasticsearch-head.tar.gz -C /usr/local/src cd /usr/local/src/ cd elasticsearch-head/ npm install #####修改主配置文件### [root@node1 ~]# cd ~ [root@node1 ~]# vi /etc/elasticsearch/elasticsearch.yml ####下面配置文件,插末尾## http.cors.enabled: true http.cors.allow-origin: "*" [root@node1t ~]# systemctl restart elasticsearch ####启动elasticsearch-head 启动服务器#### [root@node1 ~]# cd /usr/local/src/elasticsearch-head/ [root@node1 elasticsearch-head]# npm run start & ####切换到后台运行 [1] 114729 [root@node1 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 elasticsearch-head]# netstat -lnupt | grep 9100 tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 58131/grunt [root@node1 elasticsearch-head]# netstat -lnupt | grep 9200 tcp6 0 0 :::9200 :::* LISTEN 58031/java
-
配置node2
#编译安装node组件依赖包##耗时比较长 [root@node1 opt]# yum install gcc gcc-c++ make -y ##安装编译工具 [root@node2 ~ ]# cd /mnt/elk [root@node2 elk]# ls elasticsearch-5.5.0.rpm logstash-5.5.1.rpm elasticsearch-head.tar.gz node-v8.2.1.tar.gz kibana-5.5.1-x86_64.rpm phantomjs-2.1.1-linux-x86_64.tar.bz2 [root@node1 elk]# tar xzvf node-v8.2.1.tar.gz -C /opt [root@node1 elk]# cd /opt/node-v8.2.1/ [root@node1 node-v8.2.1]# ./configure [root@node1 node-v8.2.1]# make -j4 [root@node1 node-v8.2.1]# make install #安装phantomjs(前段框架显示)#### 上传软件包到/usr/local/src/ [root@node1 node-v8.2.1]# cd /mnt/elk [root@node1 elk]# ls elasticsearch-5.5.0.rpm logstash-5.5.1.rpm elasticsearch-head.tar.gz node-v8.2.1.tar.gz kibana-5.5.1-x86_64.rpm phantomjs-2.1.1-linux-x86_64.tar.bz2 [root@node1 elk]# tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src [root@node1 elk]# cd /usr/local/src [root@node1 src]# ls phantomjs-2.1.1-linux-x86_64 [root@node1 src]# cd phantomjs-2.1.1-linux-x86_64/bin [root@node1 bin]# cp phantomjs /usr/local/bin #安装elasticsearch-head(支持插件视图化管理集群)### [root@node1 node-v8.2.1]# cd /mnt/elk [root@node1 elk]# ls elasticsearch-5.5.0.rpm logstash-5.5.1.rpm elasticsearch-head.tar.gz node-v8.2.1.tar.gz kibana-5.5.1-x86_64.rpm phantomjs-2.1.1-linux-x86_64.tar.bz2 [root@node1 elk]# tar xzvf elasticsearch-head.tar.gz -C /usr/local/src cd /usr/local/src/ cd elasticsearch-head/ npm install #修改主配置文件### [root@node1 ~]# cd ~ [root@node1 ~]# vi /etc/elasticsearch/elasticsearch.yml ####下面配置文件,插末尾## http.cors.enabled: true http.cors.allow-origin: "*" [root@node1t ~]# systemctl restart elasticsearch #启动elasticsearch-head 启动服务器#### [root@node1 ~]# cd /usr/local/src/elasticsearch-head/ [root@node1 elasticsearch-head]# npm run start & ####切换到后台运行 [1] 114729 [root@node1 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@node2 elasticsearch-head]# netstat -lnupt | grep 9100 tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 112114/grunt [root@node2 elasticsearch-head]# netstat -lnupt | grep 9200 tcp6 0 0 :::9200 :::* LISTEN 112022/java
-
在物理机上访问elasticsearch集群状态
5.4: 创建elasticsearch索引
-
创建索引有两种方式
-
第一种,直接在web页面上创建
-
第二种使用命令创建索引
###索引名为 index-demo,类型为test [root@node1 ~]# curl -XPUT 'localhost: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 "创建成功" } 本地浏览器 http://192.168.100.140:9100/ "刷新" http://192.168.100.150:9100/
5.4: 部署Logstash(Apache服务器上部署)
-
部署apache服务,以及安装Logstash
#部署apache服务,以及安装Logstash 1、安装Apahce服务(httpd) yum -y install httpd systemctl start httpd netstat -ntap|grep httpd 2、安装Java环境 java -version ###如果没有装 安装yum -y install java openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-b13) OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode) 3、安装logstash 上传logstash-5.5.1.rpm到/opt目录下 [root@apache ~]# mount.cifs //192.168.31.224/redhat7 /mnt Password for root@//192.168.31.224/redhat7: ****** [root@apache ~]# cd /mnt/elk [root@apache elk]# ls elasticsearch-5.5.0.rpm logstash-5.5.1.rpm elasticsearch-head.tar.gz node-v8.2.1.tar.gz kibana-5.5.1-x86_64.rpm phantomjs-2.1.1-linux-x86_64.tar.bz2 rpm -ivh logstash-5.5.1.rpm ##安装logstash systemctl start logstash.service ##启动logstash systemctl enable logstash.service systemctl status logstash.service ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ ##建立logstash软连接 4、logstash(Apache)与elasticsearch(node)功能是否正常,做对接测试#### Logstash这个命令测试 字段描述解释: ● -f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash ● -e 后面跟着字符串 该字符串可以被当做logstash的配置(如果是” ”,则默认使用stdin做为输入、stdout作为输出) ● -t 测试配置文件是否正确,然后退出 '//输入采用标准输入 输出采用标准输出,进行测试' [root@apache opt]# logstash -e 'input { stdin{} } output { stdout{} }' ...省略内容 2020-09-14T13:52:29.177Z apache www.baidu.com "输入网址" 2020-09-14T13:52:59.360Z apache www.baidu.com www.sina.com.cn "输入网址" 2020-09-14T13:53:16.215Z apache www.sina.com.cn www.taobao.com 2020-09-14T13:53:30.410Z apache www.taobao.com www.suning.com 2020-09-14T13:53:36.695Z apache www.suning.com '//都没问题,可以Ctrl + c取消了' '//测试:使用rubydebug显示详细输出,codec为一种编解码器' [root@apache opt]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }' ...省略内容 The stdin plugin is now waiting for input: 21:54:29.927 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600} www.baidu.com "输入网址" { "@timestamp" => 2020-09-14T13:55:00.234Z, "@version" => "1", "host" => "apache", "message" => "www.baidu.com" } www.suning.com "输入网址" { "@timestamp" => 2020-09-14T13:55:15.182Z, "@version" => "1", "host" => "apache", "message" => "www.suning.com" } '//没问题,可以Ctrl + c取消了' 5. 使用logstash将信息写入elasticsearch中' "主节点的地址" [root@apache opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.100.140:9200"] } }' ...省略内容 21:58:09.312 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600} www.baidu.com "输入网址" www.sina.com.cn www.suning.com '//没问题,可以Ctrl + c取消了' 6.宿主机浏览器访问node1节点,查看索引信息 http://192.168.100.140:9100/ http://192.168.100.150:9100/
-
在物理机上访问elasticsearch集群是否记录这个日志
-
使得Logstash与elasticsearch做对接设置
Logstash配置文件主要由三部分组成:input、output、filter(根据需要) [root@apache opt]# chmod o+r /var/log/messages [root@apache opt]# ll /var/log/messages -rw----r--. 1 root root 572555 4月 16 23:50 /var/log/messages [root@apache opt]# vi /etc/logstash/conf.d/system.conf input { file{ path => "/var/log/messages" type => "system" start_position => "beginning" } } output { elasticsearch { hosts => ["192.168.100.140:9200"] "主节点的地址" index => "system-%{+YYYY.MM.dd}" } } [root@apache conf.d]# cd [root@apache ~]# systemctl restart logstash.service #测试登录192.168.100.140:9100,连接192.168.100.140:9200 查看是否有system的索引
5.6: 部署kilbana(node1上部署)
-
在node1主机安装kibana,提供日志分析功能
#在node1主机安装kibana,提供日志分析功能,也可以单独开一个节点安装 [root@node1 ~]# mount.cifs //192.168.31.224/redhat7 /mnt [root@node1 ~]# cd /mnt/elk [root@node1 elk]# rpm -ivh kibana-5.5.1-x86_64.rpm [root@node1 elk]# cd /etc/kibana/ [root@node1 kibana]# cp kibana.yml kibana.yml.bak [root@node1 kibana]# vi kibana.yml 2)server.port: 5601 #### kibana打开的端口 7)server.host: "0.0.0.0" ####kibana侦听的地址 21)elasticsearch.url: "http://192.168.100.140:9200" ###和elasticsearch建立联系 30)kibana.index: ".kibana" ####在elasticsearch中添加.kibana索引 [root@node1 kibana]# systemctl start kibana.service ###启动kibana服务 [root@node1 kibana]# systemctl enable kibana.service ###开机启动kibana服务 [root@node1 kibana]# netstat -natp | grep 5601 tcp 0 0 0.0.0.0:5601 0.0.0.0:* LISTEN 84119/node [root@node1 kibana]# #登录且创建索引,注意:这里的索引,必须是elasticsearch集群中存在的索引才能在kilbana中创建 测试//192.168.100.140:5601
-
对接Apache主机的Apache 日志文件(access.log和error.log)
[root@apache opt]# cd /etc/logstash/conf.d/ [root@apache conf.d]# touch apache_log.conf [root@apache conf.d]# vi apache_log.conf input { file{ path => "/etc/httpd/logs/access_log" type => "access" start_position => "beginning" } file{ path => "/etc/httpd/logs/error_log" type => "error" start_position => "beginning" } } output { if [type] == "access" { elasticsearch { hosts => ["192.168.100.140:9200"] index => "apache_access-%{+YYYY.MM.dd}" } } if [type] == "error" { elasticsearch { hosts => ["192.168.100.140:9200"] "主节点的地址" index => "apache_error-%{+YYYY.MM.dd}" } } } [root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf '//指定配置文件做测试'
-
登录192.168.100.140:9200,在elasticsearch集群中查看是否存在,这两个索引
先访问下apache刷新几次 192.168.100.160:80再查看192.168.100.140:9200
索引里会产生access和error两个日志 -
登录192.168.100.140:5601,进入kibana中建立索引
建立apache_access和apache_error两个索引,并查看索引内容点击discover