震惊全网的ELK日志分析系统(齐全详细理论+搭建步骤图释)

一、前言概述与基础理论

1.1 ELK系统简介

  • ELK日志分析系统是由:Elasticsearch、Logstash、Kibana组合而成
    • Elasticsearch:开源分布式搜索引擎。特点有:分布式、零配置、自动发现、索引自动分片、索引副本机制、restful风格接口、多数据源、自动搜索负载等等
    • Logstash:是个完全开源的工具,可以对我们的日志进行收集、过滤。并将其存储供以后使用
    • Kibana:也是个开源和免费的工具。Kibana可以为Logstash和Elasticsearch提供友好的日志分析Web界面,可以帮助我们汇总、分析和搜索重要数据日志

1.2 ELK日志工作原理

APPServer集群
Logstash Agent采集器
ElasticSearch Cluster
Kibana Server
Browser
  • Logstash收集AppServer产生的Log,并存放到Elastic Search集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。
  • 简单的说就是需要经过以下几个步骤
    • 1.将日志进行集中化管理(beats)
      • beats包含以下四种工具
        • ①.Packetbeat(收集网络流量数据)
        • ②.Topbeat(收集系统、进程和文件系统级别的CPU和内存使用情况等数据)
        • ③.Filebeat(收集文件数据)
        • ④.Winlogbeat(收集Windows事件日志数据)
    • 2.将日志格式化(logstash)
    • 3.对格式化后的数据进行索引和存储(elasticsearch)
    • 4.前端数据的展示(Kibana)

1.3 Elasticsearch、Logstash、Kibana详细介绍

1.3.1 Elasticsearch

  • Elasticsearch是一个基于lucene的搜素服务器。它提供了一个分布式多用户能力的全文搜索索引,基于RESTFUL Web接口
  • Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便
  • 目前GITHUB和百度这些搜索引擎都引荐成了ES搜索引擎
  • Elasticsearch的基础核心概念
    • 1.接近实时(NRT)
      • Elasticsearch是一个接近实时的搜索平台。这意味着从索引一个文档直到这个文档能够被搜索到时会有一个轻微的延迟(通常是1秒)
    • 2.集群(Cluster)
      • 一个集群就是由一个或多个节点组织在一起。它们共同持有整个集群的数据,并一起提供索引和搜索功能。其中一个节点为主节点,这个节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。集群有一个唯一性标示的名字,默认是(Elasticsearch)
      • 集群名字很重要,每个节点是基于集群名字加入到其集群中的。因此需要确保在不同环境中使用不同的集群名字
      • 一个集群可以只有一个节点。建议在配置Elasticsearch时,配置成集群模式
      • es具有集群机制,节点通过集群名称加入到集群中,同时在集群中的节点会有一个自己的唯一身份标识(自己的名称)
    • 3.节点(node)
      • 节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。
      • 像集群一样,节点也是通过名字来标识。默认是在节点启动时随机分配的字符名。也可以自己定义,该名字很重要,在集群中用于识别服务器对应的节点
      • 节点可以通过指定集群名字来加入到集群中。默认情况,每个节点都被设置加入到Elasticsearch集群。如果启动了多个节点且能自动发现彼此,它们将会自动组建一个名为Elasticsearch的集群
    • 4.索引(index)
      • 一个索引就是一个拥有几分相似特征的文档的集合。比如说你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母),并且当我们要对这个索引中对应的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字
      • 在一个集群中可以定义任意多的索引
      • 索引相当于关系型数据库的库
    • 5.类型(type)
      • 在一个索引中,可以定义一种或多种类型
      • 类型其实就是你的索引的一个逻辑上的分类或分区。其语义完全由你自己决定。通常会为具有一组共同字段的文档定义一个类型。比如说假设你运营一个论坛,且将你所有的数据存储到一个索引中。那么在这个索引中,你可以为用户数据定义一个类型,为论坛数据定义另一个类型,也可以为评论数据再定义一个类型
      • 类型相当于关系型数据库的表
    • 6.文档(document)
      • 一个文档是一个可被索引的基础信息单元。比如说你可以拥有某一个用户的文档,某一个产品的文档,也可以拥有某个订单的文档,
      • 文档以JSON(Javascript Object Notation)表示,而JSON是一个到处存在的互联网数据交互格式
      • 一个文档必须在一个索引内被索引或者分配一个类型
      • 文档相当于关系型数据库的列
    • 7.分片和副本(Shards & Replicas)
      • 在实际情况下,索引存储的数据可能超过单个节点的硬件限制。比如说一个10亿大小的文档需要1TB空间,可能不适合存储在单个节点的磁盘上,或者从单个节点搜索请求太慢了。所以为了解决这个问题,Elasticsearch提供了将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。
      • 每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上
      • 分片存在的两个最主要原因:①.水平分割扩展,增大存储量。②.分布式并行跨分片操作,提高性能和吞吐量。
      • 分布式分片的机制和搜索请求的文档如何汇总完全是由Elasticsearch控制的,而这些控制对用户而言是透明的
      • 因为网络问题等等其他问题的存在。所以为了提升健壮性,建议要有一个故障切换机制。这样当发生故障时可以防止分片或者节点不可用。为此,Elasticsearch让我们将索引分片复制一份或者多份,称之为多平副本或者副本
      • 副本存在的两个主要原因:①.高可用性,以应对分片或者节点故障。所以分片副本要再不同的节点上。②.高性能,增大吞吐量,搜索可以并行在所有副本上执行
      • 总之,每个索引可以被分片成多个分片。一个索引也可以被复制0次(没有复制的意思)和多次。一旦复制了,每个索引就有了主分片(作为复制源原来的分片)和复制分片(主分片的拷贝)之别。分片和副本的数量可以在索引创建的时候指定。在索引创建之后,可以在任何时候动态地改变副本的数量,但是不能改变分片的数量
      • 默认情况下,Elasticsearch中的每个索引被分片成5个主分片和1个副本。这也意味着集群中国至少要有两个节点,索引将会有5个主分片和另外5个副本分片(1个完全拷贝),这样的话每个索引总共就会有10个分片

1.3.2 Logstash

  • Logstash是由JRuby语言编写,基于消息(message-based)的简单架构,运行在Java虚拟机(JVM)上
  • 不同于分离的代理点(agent)或主机端(Server),Logstash可配置单一的代理端(agent)与其开源软件结合,以实现不同的功能
  • 因为Logstash只做三件事,所以它的概念很简单
    • 1.Collect:数据输入(收集)
    • 2.Enrich:数据加工(例如过滤,改写等等)
    • 3.Transport:数据输出(被其他模块进行调用)
  • Logstash主要组件
    • 1.Shipper:日志收集者。负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常远程代理端(agent)只需要运行这个组件即可
    • 2.Indexer:日志存储者。负责接收日志并写入到本地文件
    • 3.Broker:日志Hub。负责连接多个Shipper和Indexer
    • 4.Search and Storage:允许对事件进行搜索和存储
    • 5.Web Interface:基于Web的展示界面
    • 因为以上组件可以在LogStash中独立部署,所以Logstash才提供了更好的集群扩展性
  • Logstash主机分类
    • 1.代理主机(agent host):作为事件的传递者(shipper)将各种日志数据发送至中心主机。只需要运行Logstash代理程序。
    • 2.中心主机(central host):可运行包括中间转发器(Broker)、索引器(Indexer)、搜索和存储器(Search and Storage)、Web界面端(Web Interface)在内的各个组件。从而实现对日志数据的接收、处理和存储

1.3.3 Kibana

  • Kibana是一个针对 Elasticsearch的开源分析及可视化平台。用来搜索、查看交互存储在Elasticsearch索引中的数据
  • 使用Kibana可以通过各种图表进行高级数据分析及展示。Kibana让海量数据更容易理解
  • Kibana操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态
  • 设置Kibana也非常简单。无需编写代码。几分钟即可完成Kibana安装并启动Elasticsearch索引检测
  • Kibana主要功能
    • 1.Kibana架构为Elasticsearch定制,可以将任何结构化和非结构化数据加入Elasticsearch索引。Kibana还充分利用了Elasticsearch强大的搜索和分析功能
    • 2.整合数据。Kibana能够更好地处理海量数据,并以此创建柱形图、折线图、散点图、直方图、饼图和地图
    • 3.复杂数据分析。Kibana提升了Elasticsearch分析能力,能够更加智能地分析数据,执行数学转换并且根据要求来对数据切割分块
    • 4.让更多团队成员收益。强大的数据库可视化接口让各业务岗位都能够从数据集合中收益
    • 5.接口灵活,分享更容易。使用Kibana可以更加方便地创建、保存、分享数据,并将可视化数据快速交流
    • 6.配置简单。Kibana的配置和启用非常简单,用户体验非常友好。Kibana自带Web服务器,可以快速启动运行
    • 7.可视化多数据源。Kibana可以非常方便地把来自Logstash、ES-Hadoop、Beats或第三方技术的数据整合到Elasticsearch。支持的第三方技术包括:Apache Flume、Fluentd等等
    • 8.数据导出简单。Kibana可以方便地导出感兴趣的数据,与其数据集合融合后快速建模分析,发现新结果

二、ELK日志分析系统搭建

  • 配置和安装ELK日志分析系统,安装集群方式,2个Elasticsearch节点,并监控apache服务器日志

2.1 实验环境

主机操作系统主机名IP地址主要软件
服务器CentOS7.4Node1192.168.131.10Elasticsearch和Kibana
服务器CentOS7.4Node2192.168.131.11Elasticsearch
服务器CentOS7.4Apache192.168.131.12Logstash Apache
测试机本机(Win10)take-easy192.168.1.50Google浏览器

2.2 部署Elasticsearch软件(node1和node2都需部署)

  • 配置域名解析并修改java版本
【两台node节点都写入hosts文件。node1和node2的IP和对应主机名】
[root@node1 /]# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.131.10 node1
192.168.131.10 node2

[root@node1 /]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
[root@node1 local]# rz -E
rz waiting to receive.
[root@node1 local]# tar zxvf jdk-8u91-linux-x64.tar.gz 
[root@node1 local]# ls
bin  etc  games  include  jdk1.8.0_91  jdk-8u91-linux-x64.tar.gz  lib  lib64  libexec  sbin  share  src                        


[root@node1 local]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

【输出重新定义环境变量,$PATH一定要放在$JAVA_HOME的后面,让系统先读取到工作目录中的版本信息】
export PATH=${JAVA_HOME}/bin:$PATH   

  
[root@node1 local]# source /etc/profile
[root@node1 local]# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
  • 安装elasticsearch-rpm包
[root@localhost opt]# hostnamectl set-hostname node1
[root@localhost opt]# su
[root@node1 opt]# systemctl stop firewalld.service 
[root@node1 opt]# setenforce 0
[root@node1 opt]# systemctl disable firewalld.service 
[root@node1 opt]# rz -E
rz waiting to receive.
[root@node1t opt]# ls
elasticsearch-5.5.0.rpm  rh
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm 
  • 加载系统服务
[root@node1 opt]# systemctl daemon-reload 
[root@node1 opt]# systemctl enable elasticsearch.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
  • 更改elasticsearch主配置文件
【取消以下配置文件的注释,并进行相应修改】
[root@node1 opt]# vim /etc/elasticsearch/elasticsearch.yml 
 17 cluster.name: my-elk-cluster                         【修改集群名字为my-elk-cluster】
 23 node.name: node1                                     【修改节点名字为node1。node2主机则修改成node2】
 33 path.data: /data/elk_data                            【修改数据存放路径】
 37 path.logs: /var/log/elasticsearch/                   【修改日志存放路径】
 43 bootstrap.memory_lock: false 
 【锁定物理内存地址,防止es内存被交换出去,也就是避免es使用swap交换分区。因为频繁的交换会导致IOPS变高(性能测试:每秒的读写次数)】
 55 network.host: 0.0.0.0                                【提供服务绑定的IP地址,0.0.0.0代表所有地址】
 59 http.port: 9200                                      【监听端口为920068 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"]
  • 创建数据存放路径并授权
[root@node1 opt]# mkdir -p /data/elk_data
[root@node1 opt]# chown elasticsearch:elasticsearch /data/elk_data/
  • 启动elasticsearch是否成功开启
[root@node1 opt]# systemctl start elasticsearch.service 
[root@node1 opt]# netstat -natp | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      5512/java   
  • 用本机浏览器打开 http://192.168.131.10:9200/和http://192.168.131.11:9200/进行节点信息查看
    在这里插入图片描述
  • 用本机浏览器打开 http://192.168.131.10:9200/_cluster/state?pretty查看群集状态信息
    在这里插入图片描述

2.3 安装elasticsearch-head插件(数据可视化工具)

  • 因为上述查看集群的方式及其不方便,所以我们可以通过安装elasticsearch-head插件来管理集群
  • node1和node2都需安装,且步骤一直。这里仅列出node1操作配置
  • 先要编译安装node组件依赖包(耗时较长)
[root@node1 opt]# yum install -y gcc gcc-c++ make 
[root@node1 opt]# rz -E
rz waiting to receive.
[root@node1 opt]# ls
elasticsearch-5.5.0.rpm  node-v8.2.1.tar.gz  rh
[root@node1 opt]# tar zxvf node-v8.2.1.tar.gz 
[root@node1 opt]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure 
[root@node1 node-v8.2.1]# make & make install
  • 安装phantomjs(前端架构)
[root@node1 /]# cd /usr/local/src/
[root@node1 src]# ls
phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 src]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 
[root@node1 src]# cd phantomjs-2.1.1-linux-x86_64/bin/
[root@node1 bin]# cp phantomjs /usr/local/bin/       【将phantomjs可执行命令复制到路径环境变量中,便于系统识别】
[root@node1 bin]# ls /usr/local/bin/
node  npm  npx  phantomjs
  • 安装elasticsearch-head(数据可视化工具)
[root@node1 bin]# cd /usr/local/src/
[root@node1 src]# rz -E
rz waiting to receive.
[root@node1 src]# ls
elasticsearch-head.tar.gz     phantomjs-2.1.1-linux-x86_64.tar.bz2
phantomjs-2.1.1-linux-x86_64
[root@node1 src]# tar zxvf elasticsearch-head.tar.gz 
[root@node1 src]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install      【此插件基于前端开发,直接使用npm install安装即可】
  • 修改主配置文件
【直接在配置文件的末尾行插入即可】
[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml 
 89 http.cors.enabled: true           【开启跨域访问支持,默认为false90 http.cors.allow-origin: "*"       【跨域访问允许的域名地址】
[root@node1 elasticsearch-head]# systemctl restart elasticsearch.service   【修改完主配置文件后重启服务】
  • 启动elasticsearch-head,启动服务器
[root@node1 elasticsearch-head]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start &      【开启服务,并在后台工作】
[1] 44192
[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   【默认使用端口9100】
【按下回车】
[root@node1 elasticsearch-head]# netstat -lnupt | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      44202/grunt         
[root@node1 elasticsearch-head]# netstat -lnupt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      44114/java  
  • 用本机浏览器打开 http://192.168.131.10:9100/和http://192.168.131.11:9100/进行节点信息查看可以看见群集很健康且是绿色
    在这里插入图片描述
  • 创建名为index-qz,类型为qz的索引
【创建名为index-qz,类型为qz的索引】
[root@node1 local]# curl -XPUT 'localhost:9200/index-qz/qztest/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
{
  "_index" : "index-qz",
  "_type" : "qztest",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "created" : true
}





【以下为额外补充知识,无须操作】
[root@node1 local]# curl '192.168.131.10:9200/_cat/indices?v'             【查看索引】
health status index    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   index-qz sfQUN51gQCOL6mBtb3ExcA   5   1          1            0     16.5kb          8.2kb
[root@node1 local]# curl -XDELETE 192.168.131.10:9200/index-qz            【删除指定索引】
[root@node1 local]# curl -XDELETE 192.168.131.10:9200/index-qz,index-qz1  【删除多个指定索引,用","分隔】
[root@node1 local]# curl -XDELETE 192.168.1.4:9200/_all                   【删除全部索引】
[root@node1 local]# curl -XDELETE 192.168.1.4:9200/ *                     【删除全部索引】
  • 登录192.168.131.10 node1主机,可以看到成功创建名为index-qz,类型为qz的索引
    在这里插入图片描述

2.4 logstash(日志收集)安装与使用

  • 修改主机名并关闭防火墙与核心防护
[root@localhost ~]# hostnamectl set-hostname apache
[root@localhost ~]# su
[root@apache ~]# systemctl stop firewalld.service 
[root@apache ~]# setenforce 0
[root@apache ~]# systemctl disable firewalld.service 
  • 安装并开启Apache服务并修改JAVA版本(没有JAVA则yum安装)
[root@apache ~]# yum -y install httpd
[root@apache ~]# systemctl start httpd.service 


[root@apache /]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
[root@apache local]# rz -E
rz waiting to receive.
[root@apache local]# tar zxvf jdk-8u91-linux-x64.tar.gz 
[root@apache local]# ls
bin  etc  games  include  jdk1.8.0_91  jdk-8u91-linux-x64.tar.gz  lib  lib64  libexec  sbin  share  src                        


[root@apache local]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

【输出重新定义环境变量,$PATH一定要放在$JAVA_HOME的后面,让系统先读取到工作目录中的版本信息】
export PATH=${JAVA_HOME}/bin:$PATH   

  
[root@apache local]# source /etc/profile
[root@apache local]# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
  • 安装logstash
[root@apache local]# cd /opt/
[root@apache opt]# rz -E
rz waiting to receive.
[root@apache opt]# ls
logstash-5.5.1.rpm  rh
[root@apache opt]# rpm -ivh logstash-5.5.1.rpm                              【安装logstash】
[root@apache opt]# systemctl start logstash.service                         【启动logstash】
[root@apache opt]# systemctl enable logstash.service                        【开机自启logstash】
[root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/   【创建软链接,便于系统识别】 
  • 对接测试logstash(apache)与elasticsearch(node)功能是否正常并简单测试标准输入输出
选项说明
-f可以指定logstash的配置文件,根据配置文件配置logstash
-e后面跟着字符串,该字符串可以被当做logstash的配置
如果是" ",则默认使用stdin作为输入、stdout作为输出
-t测试配置文件是否正确,然后退出
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{} }'
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path //usr/share/logstash/config/log4j2.properties. Using default config which logs to console
14:59:07.056 [main] INFO  logstash.setting.writabledirectory - Creating directory {:setting=>"path.queue", :path=>"/usr/share/logstash/data/queue"}
14:59:07.088 [main] INFO  logstash.setting.writabledirectory - Creating directory {:setting=>"path.dead_letter_queue", :path=>"/usr/share/logstash/data/dead_letter_queue"}
14:59:07.128 [LogStash::Runner] INFO  logstash.agent - No persistent UUID file found. Generating new UUID {:uuid=>"aee76441-5007-44e7-966e-cd58b0529657", :path=>"/usr/share/logstash/data/uuid"}
14:59:07.341 [[main]-pipeline-manager] INFO  logstash.pipeline - Starting pipeline {"id"=>"main", "pipeline.workers"=>2, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>250}
14:59:07.361 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
14:59:07.467 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com                                          【输入百度进行测试】
2021-05-22T06:59:31.515Z apache www.baidu.com
www.qq.com                                             【输入qq进行测试】
2021-05-22T06:59:59.439Z apache www.qq.com
  • 使用rubydebug进行格式转化显示详细输出,codec为一种解码器
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path //usr/share/logstash/config/log4j2.properties. Using default config which logs to console
15:07:02.189 [[main]-pipeline-manager] INFO  logstash.pipeline - Starting pipeline {"id"=>"main", "pipeline.workers"=>2, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>250}
15:07:02.308 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
15:07:02.467 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.qq.com                             【输入qq进行测试】
{
    "@timestamp" => 2021-05-22T07:07:19.823Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "www.qq.com"
}
www.baidu.com                         【输入百度进行测试】
{
    "@timestamp" => 2021-05-22T07:07:29.605Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "www.baidu.com"
}
  • 使用logstash将信息写入elasticsearch中
【标准输入信息,并输出到192.168.131.10:9200主机的es中】
[root@apache opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.131.10:9200"] } }'
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path //usr/share/logstash/config/log4j2.properties. Using default config which logs to console
15:10:32.492 [[main]-pipeline-manager] INFO  logstash.outputs.elasticsearch - Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://192.168.131.10:9200/]}}
15:10:32.522 [[main]-pipeline-manager] INFO  logstash.outputs.elasticsearch - Running health check to see if an Elasticsearch connection is working {:healthcheck_url=>http://192.168.131.10:9200/, :path=>"/"}
15:10:32.697 [[main]-pipeline-manager] WARN  logstash.outputs.elasticsearch - Restored connection to ES instance {:url=>#<Java::JavaNet::URI:0x4dc8cd21>}
15:10:32.728 [[main]-pipeline-manager] INFO  logstash.outputs.elasticsearch - Using mapping template from {:path=>nil}
15:10:32.923 [[main]-pipeline-manager] INFO  logstash.outputs.elasticsearch - Attempting to install template {:manage_template=>{"template"=>"logstash-*", "version"=>50001, "settings"=>{"index.refresh_interval"=>"5s"}, "mappings"=>{"_default_"=>{"_all"=>{"enabled"=>true, "norms"=>false}, "dynamic_templates"=>[{"message_field"=>{"path_match"=>"message", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false}}}, {"string_fields"=>{"match"=>"*", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false, "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}}}], "properties"=>{"@timestamp"=>{"type"=>"date", "include_in_all"=>false}, "@version"=>{"type"=>"keyword", "include_in_all"=>false}, "geoip"=>{"dynamic"=>true, "properties"=>{"ip"=>{"type"=>"ip"}, "location"=>{"type"=>"geo_point"}, "latitude"=>{"type"=>"half_float"}, "longitude"=>{"type"=>"half_float"}}}}}}}}
15:10:32.935 [[main]-pipeline-manager] INFO  logstash.outputs.elasticsearch - Installing elasticsearch template to _template/logstash
15:10:33.020 [[main]-pipeline-manager] INFO  logstash.outputs.elasticsearch - New Elasticsearch output {:class=>"LogStash::Outputs::ElasticSearch", :hosts=>[#<Java::JavaNet::URI:0x1edf0339>]}
15:10:33.023 [[main]-pipeline-manager] INFO  logstash.pipeline - Starting pipeline {"id"=>"main", "pipeline.workers"=>2, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>250}
15:10:33.227 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
15:10:33.399 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.qq.com      【输入内容进行测试】
www.baidu.com
www.qz.com
  • 本机浏览器输入http://192.168.131.10:9100/查看索引信息
    在这里插入图片描述

2.5 登录Apache主机(192.168.131.12)做对接配置

  • 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 573414 522 15:21 /var/log/messages

【配置文件中定义的是收集系统日志(system)】
[root@apache opt]# vim /etc/logstash/conf.d/system.conf  【编辑Logstash配置文件】

input {                                                  【输入文件】
       file{
        path => "/var/log/messages"                      【路径:/var/log/messages】
        type => "system"                                 【类型:system】
        start_position => "beginning"                    【起始点:beginning】
        }
      }
output {                                                 【输出到】
        elasticsearch {    
          hosts => ["192.168.131.10:9200"]               【IP:端口为192.168.131.10:9200的主机】
          index => "system-%{+YYYY.MM.dd}"               【索引:system-...}
[root@apache opt]# systemctl restart logstash.service    【修改完配置文件重启服务】
  • 本机浏览器输入http://192.168.131.10:9100/查看索引信息
    在这里插入图片描述

2.6 在node1主机安装kibana

[root@node1 opt]# cd /usr/local/src/
[root@node1 src]# rz -E
rz waiting to receive.
[root@node1 src]# ls
elasticsearch-head  elasticsearch-head.tar.gz  kibana-5.5.1-x86_64.rpm  phantomjs-2.1.1-linux-x86_64  phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 src]# rpm -ivh kibana-5.5.1-x86_64.rpm 


[root@node1 src]# vim /etc/kibana/kibana.yml          【编辑kibana配置文件】

  2 server.port: 5601                                 【kibana开启端口】
  7 server.host: "0.0.0.0"                            【kibana侦听地址】
 21 elasticsearch.url: "http://192.168.131.10:9200"   【和elasticsearch建立联系】
 30 kibana.index: ".kibana"                           【在elasticsearch中添加.kibana索引】
[root@node1 src]# systemctl start kibana.service 
[root@node1 src]# systemctl enable kibana.service 
  • 本机浏览器输入http://192.168.131.10:5601/查看
    在这里插入图片描述
    在这里插入图片描述
  • 再点击hsot旁边的add后则会很友好的只显示Time和Host选项
    在这里插入图片描述

2.7 对接apache日志文件(访问、错误)

[root@apache opt]# cd /etc/logstash/conf.d/
[root@apache conf.d]# vim 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.131.10:9200"]
          index => "apache_access-%{+YYYY.MM.dd}"
          }
        }
        if [type] == "error" {
        elasticsearch {
          hosts => ["192.168.131.10:9200"]
          index => "apache_error-%{+YYYY.MM.dd}"
          }
        }
        }
[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf 
  • 本机浏览器输入http://192.168.131.10:9100/查看,可以发现apache_access和apache_error两个索引
    在这里插入图片描述
  • - [ ] 本机浏览器输入http://192.168.131.10:5601/查看

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TaKe___Easy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值