热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于ELK搭建微服务日志中心

基于ELK搭建微服务日志中心ELK简介什么是ELK?通俗来讲,ELK是由Elasticsearch、Logstash、Kibana三个开源软件组成的一个组合体,这三个软件

基于ELK搭建微服务日志中心

ELK简介

什么是ELK?通俗来讲,ELK是由Elasticsearch、Logstash、Kibana 三个开源软件组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,ELK又称ELKstack,官网 https://www.elastic.co/ , ELK主要优点有如下几个:
1、处理方式灵活:elasticsearch是实时全文索引,具有强大的搜索功能
2、配置相对简单:elasticsearch全部使用JSON接口,logstash使用模块配置,kibana的配置文件部分更简单
3、检索性能高:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应
4、集群线性扩展:elasticsearch和logstash都可以灵活线性扩展
5、前端操作绚丽:kibana的前端设计比较绚丽,而且操作简单

Elasticsearch

elasticsearch是一个高度可扩展全文搜索和分析引擎,基于Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作,可以处理大规模日志数据,比如Nginx、Tomcat、系统日志等功能。

Logstash

数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;支持普通log、自定义json格式的日志解析。

Kibana

数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示。

filebeat

首先 filebeat 不属于 ELK中的组件是为ELK服务的可选组件之一。因为Logstash 有一个致命的问题是它的性能以及资源消耗(默认的堆大小是 1GB)。尽管它的性能在近几年已经有很大提升,与它的替代者们相比还是要慢很多的。作为 Beats 家族的一员,Filebeat 是一个轻量级的日志传输工具,它的存在正弥补了 Logstash 的缺点:Filebeat 作为一个轻量级的日志传输工具可以将日志推送到中心 Logstash。Filebeat 只是一个二进制文件没有任何依赖。它占用资源极少,尽管它还十分年轻,正式因为它简单,所以几乎没有什么可以出错的地方,所以它的可靠性还是很高的。它也为我们提供了很多可以调节的点,例如:它以何种方式搜索新的文件,以及当文件有一段时间没有发生变化时,何时选择关闭文件句柄。

开始部署

系统环境检查

1、因为elasticsearch服务运行需要java环境,所有首先要检查服务器中的 java 环境。推荐jdk版本至少为1.8以上

[root@iZbp136dr1iwajle0r9j83Z soft]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

2、创建用户,因为elasticsearch是不能再root账户下运行所以重新创建一个用户

[root@iZbp136dr1iwajle0r9j83Z ~]# useradd elk

3、创建文件夹

[root@iZbp136dr1iwajle0r9j83Z ~]# su - elk  # 切换到 elk 用户
[elk@iZbp136dr1iwajle0r9j83Z ~]$ mkdir soft  # 用来存储原始压缩包文件
[elk@iZbp136dr1iwajle0r9j83Z ~]$ mkdir applications  #  用来存放部署的文件
下载 ELK 文件

下载过程就自行到相关的官网上下载把,注意下载版本最好是能够对应起来的否则会出现一些莫名其妙的问题。

[root@iZbp136dr1iwajle0r9j83Z soft]# ll -l 
total 708484
-rw-rw-r-- 1 app app 290094012 Jan  2 14:31 elasticsearch-7.5.1-linux-x86_64.tar.gz
-rw-rw-r-- 1 app app  24086235 Jan  2 14:26 filebeat-7.5.1-x86_64.rpm
-rw-rw-r-- 1 app app 238481011 Jan  2 13:28 kibana-7.5.1-linux-x86_64.tar.gz
-rw-rw-r-- 1 app app 172809530 Jan  2 13:27 logstash-7.5.1.zip

这是我下载的文件,从文件属性上还是属于 app 用户的。为了方便统一管理现在将这些文件全部转给 elk 用户

[root@iZbp136dr1iwajle0r9j83Z soft]# chown -R elk:elk *
[root@iZbp136dr1iwajle0r9j83Z soft]# ll -l 
total 708484
-rw-rw-r-- 1 elk elk 290094012 Jan  2 14:31 elasticsearch-7.5.1-linux-x86_64.tar.gz
-rw-rw-r-- 1 elk elk  24086235 Jan  2 14:26 filebeat-7.5.1-x86_64.rpm
-rw-rw-r-- 1 elk elk 238481011 Jan  2 13:28 kibana-7.5.1-linux-x86_64.tar.gz
-rw-rw-r-- 1 elk elk 172809530 Jan  2 13:27 logstash-7.5.1.zip

将文件解压到 applications 文件夹中

# 处理 elasticsearch-7.5.1
[elk@iZbp136dr1iwajle0r9j83Z soft]$ tar -zxvf elasticsearch-7.5.1-linux-x86_64.tar.gz
[elk@iZbp136dr1iwajle0r9j83Z soft]$ mv elasticsearch-7.5.1 ../applications/
# 处理 logstatsh-7.5.1.zip
[elk@iZbp136dr1iwajle0r9j83Z soft]$ unzip logstatsh-7.5.1.zip
[elk@iZbp136dr1iwajle0r9j83Z soft]$ mv logstash-7.5.1 ../applications/
# 处理 kibana-7.5.1
[elk@iZbp136dr1iwajle0r9j83Z soft]$ tar -zxvf kibana-7.5.1-linux-x86_64.tar.gz
[elk@iZbp136dr1iwajle0r9j83Z soft]$ mv kibana-7.5.1-linux-x86_64 ../applications/
部署 elasticsearch

修改elasticsearch.yml文件

[elk@iZbp136dr1iwajle0r9j83Z config]$ vim elasticsearch.yml
#集群名称
cluster.name: els
#节点名称
node.name: els-1
#数据存放路径
path.data: /data/els/data
#日志存放路径
path.logs: /data/logs/els/log
#绑定IP地址
network.host: 172.16.240.19
#端口号
http.port: 7008
discovery.seed_hosts: ["172.16.240.19"]
cluster.initial_master_nodes: ["els-1"]
# 允许跨域访问(kibana获取数据时需要开放)
http.cors.enabled: true
http.cors.allow-origin: '*'

创建数据目录

mkdir /data/els
mkdir /data/logs/els

启动 elasticsearch

        [elk@iZbp136dr1iwajle0r9j83Z soft]$ cd /home/elk/applications/elasticsearch-7.5.1/bin/
        [elk@iZbp136dr1iwajle0r9j83Z soft]$ ./elasticsearch

访问elasticsearch_ip:port 看是否启动正常
基于ELK搭建微服务日志中心

部署 kibana

编辑配置文件

cd /home/elk/applications/kibana-7.5.1-linux-x86_64/config
# 修改配置
server.port: 7011
server.host: "0.0.0.0"
server.name: "kibana-server"
elasticsearch.url: "http://172.16.240.19:7008"
kibana.index: ".kibana"
i18n.locale: "zh-CN"

启动 kibana

cd /home/elk/applications/kibana-7.5.1-linux-x86_64/bin
./kibana

访问kibana_ip:port
基于ELK搭建微服务日志中心

部署 logstatsh

由于后期日志数据是通过 filebeat 收集上来的,因此针对 filebeat 单独创建一个配置文件来进行处理

cd /home/elk/logstash-7.5.1/config
vim beat.conf
input {
  # 接收filebeat读取的数据
  beats {
    port => 7110
    codec => "json"
  }
}

output {
  # 输出到es
  elasticsearch {
    hosts => ["172.16.240.19:7008"]
    index => "cloud"
    document_type => "log"
    manage_template => false
  }
}

测试配置文件语法是否正确

cd /home/elk/applications/logstash-7.5.1/bin/
./logstash -f /home/elk/applications/logstash-7.5.1/config/beat.conf -t
Thread.exclusive is deprecated, use Thread::Mutex
Sending Logstash logs to /home/elk/applications/logstash-7.5.1/logs which is now configured via log4j2.properties
[2020-01-02T16:12:12,309][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.queue", :path=>"/home/elk/applications/logstash-7.5.1/data/queue"}
[2020-01-02T16:12:12,461][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/home/elk/applications/logstash-7.5.1/data/dead_letter_queue"}
[2020-01-02T16:12:12,890][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2020-01-02T16:12:14,200][INFO ][org.reflections.Reflections] Reflections took 41 ms to scan 1 urls, producing 20 keys and 40 values 
[2020-01-02T16:12:14,673][WARN ][logstash.outputs.elasticsearch] You are using a deprecated config setting "document_type" set in elasticsearch. Deprecated settings will continue to work, but are scheduled for removal from logstash in the future. Document types are being deprecated in Elasticsearch 6.0, and removed entirely in 7.0. You should avoid this feature If you have any questions about this, please visit the #logstash channel on freenode irc. {:name=>"document_type", :plugin=>"cloud", manage_template=>false, id=>"c864643340e20cc0970e7438081bbe9f8d9e69638b91d662640155c5e847f531", hosts=>[//172.16.240.19:7008], document_type=>"log", enable_metric=>true, codec=>"plain_17e73b8f-bd1b-45ff-84ab-2a41f766a1a0", enable_metric=>true, charset=>"UTF-8">, workers=>1, template_name=>"logstash", template_overwrite=>false, doc_as_upsert=>false, script_type=>"inline", script_lang=>"painless", script_var_name=>"event", scripted_upsert=>false, retry_initial_interval=>2, retry_max_interval=>64, retry_on_cOnflict=>1, ilm_enabled=>"auto", ilm_rollover_alias=>"logstash", ilm_pattern=>"{now/d}-000001", ilm_policy=>"logstash-policy", action=>"index", ssl_certificate_verification=>true, sniffing=>false, sniffing_delay=>5, timeout=>60, pool_max=>1000, pool_max_per_route=>100, resurrect_delay=>5, validate_after_inactivity=>10000, http_compression=>false>}
Configuration OK
[2020-01-02T16:12:14,709][INFO ][logstash.runner          ] Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash

Configuration OK 则表示配置文件是成功的,接下来启动 logstash 并加载 beat.conf

./logstash -f /home/elk/applications/logstash-7.5.1/config/beat.conf
部署 filebeat

在需要收集日志的主机上安装 filebeat 组件

[root@iZbp14b5r2lytw5nc5z3w2Z filebeat]# pwd
/usr/share/filebeat
[root@iZbp14b5r2lytw5nc5z3w2Z filebeat]# ll -l
total 23524
-rw-r--r-- 1 root root 24086235 Jan  2 16:19 filebeat-7.5.1-x86_64.rpm
[root@iZbp14b5r2lytw5nc5z3w2Z filebeat]# sudo rpm -vi filebeat-7.5.1-x86_64.rpm 
warning: filebeat-7.5.1-x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing packages...
filebeat-7.5.1-1.x86_64

编辑配置修改 /etc/filebeat/filebeat.yml 以设置连接信息:

filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.

- type: log
  enabled: true
  tags: ["clo***dmin"]
  paths:
    - /logs/S*******/clou***min/**/*.log  

  # 将非时间戳开头的日志信息合并
  multiline.pattern: '^\[[0-9]{4}-[0-9]{2}-[0-9]{2}'
  multiline.negate: true
  multiline.match: after

    #----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["172.16.240.19:7112"]
  index: joy######loud

启动 filebeat 服务

cd /usr/share/filebeat/bin
./filebeat -e -c /etc/filebeat/filebeat.yml 

配置 kibana

基于ELK搭建微服务日志中心

配置完成后查看是否有日志收集上来
基于ELK搭建微服务日志中心

可以看到已经有数据上来了。然后再跟看tags值在检索条件中过滤就能过滤出不同服务输出的日志信息了。

后续

至此通过 ELK 搭建微服务日志中心的基本操作已经完成了,但是还有许多需要优化的地方例如:集群化部署,redis或Kafka进行数据转存降低对业务服务的依赖,另外案例中所有的启动命令是直接运行的,后台线程退出后服务就会关闭因此需要进行一些优雅的命令设计等等这些都是后续中需要完善的。


推荐阅读
  • Flume 数据采集组件
    目录1、数据收集工具系统产生背景2、专业的数据收集工具2.1、Chukwa2.2、Scribe2.3、Fluentd2.4、Logstash2.5、ApacheFlu ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 分享一下我老师大神的人工智能教程!零基础,通俗易懂!http:blog.csdn.netjiangjunshow也欢迎大家转载本篇文章。分 ... [详细]
  • 1.ELK系统是什么ELK是一套日志中心解决方案,其三个字母分别表示:Elasticsearch:负责日志存储及检索Logstash&#x ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 解决php错误信息不显示在浏览器上的方法
    本文介绍了解决php错误信息不显示在浏览器上的方法。作者发现php中的各种错误信息并不显示在浏览器上,而是需要在日志文件中查看。为了解决这个问题,作者提供了一种解决方式:通过修改php.ini文件中的display_errors参数为On,并重启服务。这样就可以在浏览器上直接显示php错误信息了。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • DockerDataCenter系列(四)-离线安装UCP和DTR,Go语言社区,Golang程序员人脉社 ... [详细]
  • 2021OpenInfra年度报告摘要:OpenInfra在中国
    中国OpenInfra社区在多个开源项目中非常活跃,包括OpenStack、KataContainers和OpenInfra实Labs。2021年,这些 ... [详细]
  • ELK stack 学习记录
    ELK日志分析平台学习记录首先ELK主要指elasticsearch、logstash和kibana,三个开源软件组合而成的一套日志平台解决方案。可以将平时收集到的日志,通过前台展 ... [详细]
  •                               前言日志,一直以来都是开发人员和运维人员最关心的问题。开发人员可通过日志记录来协助问题定位,运维人员可通过日志发现系统隐 ... [详细]
  • ELK+filebeat安装部署监控springboot日志
    ELK服务器端部署1.安装dockercompose,略2.配置docker-compose.ymlcdrootelkvidocker-compose.ymlversion:&am ... [详细]
  • 优秀到卓越就差比他更快搭建elk集群架构上篇
    工作原理开源分布式搜索引擎,特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制 ... [详细]
author-avatar
Jacky麦麦9
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有