首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ELK日志收集原理+es集群+elk搭建+本地目录文件读取,搭建分布式日志收集系统

ELK日志收集原理+es集群+elk搭建+本地目录文件读取,搭建分布式日志收集系统

作者头像
黎明大大
发布2020-09-08 15:37:56
4.1K0
发布2020-09-08 15:37:56
举报
文章被收录于专栏:java相关资料java相关资料

ELK分布式日志收集系统介绍

1.ElasticSearch是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

2.Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

3.Kibana是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

为什么要使用ELK

在传统项目中,如果在生产环境上,将项目部署在多台服务器上进行集群,如果生产环境需要通过日志定位到BUG的话,需要在每台服务器节点上使用传统的命令方式查询,这样的查询是非常低效,且非常考验人的忍耐力的,而ELK恰恰就帮助我们解决这样的问题

ELK的工作原理

1.在集群环境中,每一个实例节点都进行安装Logstash插件 2.每个服务器节点,都会将自身的本地日志文件输入到Logstash中 3.Logstash获取日志文件后格式化为json格式,根据每天创建不同的索引,输出到ES服务中进行存放 4.以图形化界面进行展示,搜索日志

Logstash介绍

Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。 核心流程:Logstash事件处理有三个阶段:inputs → filters → outputs。是一个接收,处理,转发日志的工具。支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。

Logstash工作原理

简单来说 1.本地数据文件输入到logstash中 2.logstash过滤些不要的数据,然后将数据转成指定的格式 3.输出到指定的数据源中

前提准备:

1.ES+kibana+logstash 一台虚拟机配置运行内存3G,由于本人电脑资源有限开了2台 共6个G

一、安装jdk

1.安装之前先检查一下系统有没有自带open-jdk

命令:

rpm -qa |grep java
rpm -qa |grep jdk
rpm -qa |grep gcj

如果没有输入信息表示没有安装。 如果安装可以使用rpm -qa | grep java | xargs rpm -e --nodeps 批量卸载所有带有Java的文件 这句命令的关键字是java

2.首先检索包含java的列表

yum list java*

3.检索1.8的列表

yum list java-1.8*   

4.安装1.8.0的所有文件

yum install java-1.8.0-openjdk* -y

5.使用命令检查是否安装成功

java -version

二、集群环境下基于docker安装es和kibana

启动两个虚拟机 分别在不同的虚拟机启动es容器和kibana

启动虚拟机1,es名称为:es1

下载es 和 kibana
docker pull elasticsearch:6.7.2
docker pull kibana:6.7.2

运行容器
docker run -it  --name es1 -d -p 9200:9200 -p 9300:9300 -p 5601:5601 elasticsearch:6.7.2
docker run -it -d -e ELASTICSEARCH_URL=http://127.0.0.1:9200 --name kibana --network=container:es1 kibana:6.7.2

启动虚拟机2,es名称为:es2

下载es 和 kibana
docker pull elasticsearch:6.7.2
docker pull kibana:6.7.2

运行容器
docker run -it  --name es2 -d -p 9200:9200 -p 9300:9300 -p 5601:5601 elasticsearch:6.7.2
docker run -it -d -e ELASTICSEARCH_URL=http://127.0.0.1:9200 --name kibana --network=container:es2 kibana:6.7.2

如果在启动的ES过程中,报如下错误

解决方案: 分配给ES的内存太小了 1.进入etc目录,编辑sysctl.conf文件:

vi /etc/sysctl.conf 

2.添加配置:

vm.max_map_count=262144 或者 655360

3.执行:

sysctl -p

重启服务器

三、配置ES集群

进入容器修改集群配置服务器1

#进入容器
docker exec -it 容器ID /bin/bash

#编辑配置文件
vi /usr/share/elasticsearch/config/elasticsearch.yml

#注释掉原有的配置  添加配置
cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: 192.168.137.8
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true 
node.data: true  
discovery.zen.ping.unicast.hosts: ["192.168.137.8:9300","192.168.137.9:9300"]
discovery.zen.minimum_master_nodes: 2

#保存退出

#退出容器
exit

进入容器修改集群配置服务器2

#进入容器
docker exec -it 容器ID /bin/bash

#编辑配置文件
vi /usr/share/elasticsearch/config/elasticsearch.yml

#注释掉原有的配置  添加配置
cluster.name: elasticsearch-cluster
node.name: es-node2
network.bind_host: 0.0.0.0
network.publish_host: 192.168.137.9
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true 
node.data: true  
discovery.zen.ping.unicast.hosts: ["192.168.137.8:9300","192.168.137.9:9300"]
discovery.zen.minimum_master_nodes: 2

#保存退出

#退出容器
exit

最后重启两个服务器docker里面的es,让配置进行生效

docker restart 容器id

网页访问集群的两台es,可以发现es配置已经生效了

但是这样还并不能确定是否成功集群,访问如下ES集群其中任何IP地址即可

http://192.168.137.8:9200/_cat/nodes?pretty

如下图,就代表es集群成功搭建

四、下载logstash源码包

需要注意:每台服务器上都需要安装logstash,如下面操作,我这里只示例一个 因为集群下每个服务器都会有日志,所以每个服务都需要安装logstash去收集日志发到es中

下载源码包
官方地址
https://www.elastic.co/cn/downloads/logstash

国内加速下载网址
https://www.newbe.pro/Mirrors/Mirrors-Logstash/

下载地址
wget https://mirrors.huaweicloud.com/logstash/6.7.2/logstash-6.7.2.zip

下载zip命令解压
yum -y install zip

解压
unzip logstash-6.7.2.zip
修改配置文件

进入到logstash/config目录

#新建sunny_log.conf文件
vim sunny_log.conf

#添加配置文件
input {
    # 从文件读取日志信息 输送到控制台
    file {
        path => "/usr/local/software/my/logs/eureka_all_2020-06-30_0.log"
        codec => "json" ## 以JSON格式读取日志
        type => "elasticsearch"
        start_position => "beginning"
    }
}

# filter {
#
# }

output {
    # 标准输出
    # stdout {}
    # 输出进行格式化,采用Ruby库来解析日志
     stdout { codec => rubydebug }
         elasticsearch {
        hosts => ["192.168.137.8:9200","192.168.137.9:9200"]
        index => "es-%{+YYYY.MM.dd}"
    }
}

#保存

添加完配置后,进入logstash/bin目录下,启动logstash

 ./logstash -f ../config/sunny_log.conf

启动成功

五、通过kibana查看日志

以上的配置是读取一个日志文件,那如果需要读取多个日志文件该怎么办呢? 很简单,我们稍微改动配置文件即可 读取logs目录下,所有以log结尾的文件,都输出到es中

可能又会有人疑惑,我能否同步多个目录呢 假如logs下有两个目录,每个目录不同的日志文件 /:代表logs下所有目录都匹配 //*.log:代表logs下匹配所有目录下的目录里面的log文件

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ELK分布式日志收集系统介绍
  • 为什么要使用ELK
  • ELK的工作原理
  • Logstash介绍
  • Logstash工作原理
  • 一、安装jdk
    • 1.安装之前先检查一下系统有没有自带open-jdk
      • 2.首先检索包含java的列表
        • 3.检索1.8的列表
          • 4.安装1.8.0的所有文件
            • 5.使用命令检查是否安装成功
            • 二、集群环境下基于docker安装es和kibana
            • 三、配置ES集群
            • 四、下载logstash源码包
            • 五、通过kibana查看日志
            相关产品与服务
            Elasticsearch Service
            腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档