中小型研发团队架构实践七:集中式日志ELK
一、集中式日志
日志可分为系统日志、应用日志以及业务日志,系统日志给运维人员使用,应用日志给研发人员使用,业务日志给业务操作人员使用。我们这里主要讲解应用日志,通过应用日志来了解应用的信息和状态,以及分析应用错误发生的原因等。
随着系统的日益复杂,大数据时代的来临,需要几十甚至上百台的服务器是常有的事,因此迫切需要有一套针对日志、且能够集中式管理的产品。ELK 就实现了集中式日志管理平台,该平台统一涵盖了分布式日志收集、检索、统计、分析以及对日志信息的 Web 管理等集中化管控。
1.1、ELK 简介
ELK 是 Elasticsearch、Logstash、Kibana 的简称,这三套开源工具组合起来能搭建一套强大的集中式日志管理平台。
Elasticsearch 是个开源的分布式搜索引擎,提供搜索、分析、存储数据三大功能。它的特点有:分布式、自动发现、索引自动分片、索引副本机制、RESTful 风格接口、多数据源以及自动搜索负载等。
Logstash 是一个开源的用来收集、解析、过滤日志的工具。支持几乎任何类型的日志,包括系统日志、业务日志和安全日志。它可以从许多来源接收日志,这些来源主要包括 Syslog、消息传递(例如 RabbitMQ)和 Filebeat;能够以多种方式输出数据,这些方式主要包括电子邮件、WebSockets 和 Elasticsearch。
Kibana 是一个基于 Web 的友好图形界面,用于搜索、分析和可视化存储在 Elasticsearch 中的数据。它利用 Elasticsearch 的 RESTful 接口来检索数据,不仅允许用户定制仪表板视图,还允许他们以特殊的方式查询、汇总和过滤数据。
1.2、ELK 的架构
下图是集中式日志管理 ELK 的架构图。出于性能的考虑,选择采用了 Beats+EK 的形式来组合搭建集中式日志管理系统。

ELK 架构
二、配置方法
2.1、Elasticsearch
Elasticsearch 部署完成后,需要更改 elasticsearch.yml 配置文件中的主要属性:cluster.name、node.name、network.host、discovery.zen.ping.unicast.hosts。其中,当部署 Elasticsearch 时是以集群模式部署的,那么 discovery.zen.ping.unicast.hosts 这个属性才会需要被配置。
2.2、Logstash
通过配置 filebeat-pipeline.conf 文件中的 Input、Filter(可选)和 Output 来完成对数据的采集、过滤和输出,如下图所示:

Logstash 配置
然后以 filebeat-pipline.conf 文件启用 Logstash 服务,如下图所示:

启用 Logstash 服务
备注:由于采用的是 Beats+EK 这个方案来实现集中式日志管理,所以不需要配 Logstash。
2.3、Kibana
通过更改 kibana.yml 配置文件内容,用来连接正确的 Elasticsearch 服务地址,通常只需要配置 elasticsearch.url 属性即可,请见下图的第一个图。配置完成后,执行【bin/kibana &】命令启用 Kibana 服务,请见下图的第二个图。最后就可以在浏览器中打开 Kibana 管理页面(访问地址:http://139.198.13.12:4800/)来查看日志。

Kibana 的配置说明

启用 Kibana 服务
2.4、Filebeat
filebeat.yml 配置文件内容主要包含 Filebeat、Output、Shipper(可选)、Logging(可选)四大部分,其中 Filebeat 主要定义监控的日志文件信息,Output 主要配置日志数据的输出目标。
filebeat.yml 文件中,主要属性值的命名规范如下:
- fields.AppID 的命名规范是{AppID}。
- fields.AppName 的命名规范是{产品线英文名称}.{项目英文名称}(如果项目英文名称由 2 个或 2 个以上英文单词组成,则单词之间请用. 分隔)。
- 针对 index 属性需要注意的是:索引 (index) 所定义的值是{产品线英文名称},但英文字母必须全部小写,且不能以下划线开头,也不能包含逗号。
filebeat.yml 的配置示例如下图所示:

filebeat.yml 的配置示例
日志文件存放在哪台服务器中,filebeat 服务就部署在哪台服务器中。在 windows 操作系统上启用 filebeat 服务的步骤:
1、在 windows 下开启搜索,输入 powershell,打开 powershell 所在文件位置,右键 powershell.exe 以管理员身份运行,进入 PowerShell 窗口。
或者以管理员身份启动 cmd.exe,输入命令 powershell,进入 PowerShell 窗口 。
注意:
请务必确保以管理员身份打开 PowerShell 窗口,否则的话在以下第 2 步中运行.ps1 脚本时,就会报没有权限创建 filebeat 服务的错误:

2、导向到 filebeat 执行程序所在目录,例如:cd 'E:\ELK\filebeat-1.3.0-windows',然后执行命令:powershell.exe -ExecutionPolicy UnRestricted -File .\install-service-filebeat.ps1。
3、之后可以在 PowerShell 窗口中通过以下几个命令来查看、启用以及停止 filebeat 服务:
- 查看 filebeat 服务状态:Get-Service filebeat
- 启动 filebeat 服务:Start-Service filebeat
- 停止 filebeat 服务:Stop-Service filebeat
三、使用方法
3.1、Log4Net 本地日志
1、日志存放路径规范:{盘符}:\Log4Net{AppID}\,其中 AppID 即为我们所做项目的六位编码。例如:D:\Log4Net\110107\。
2、log4net.config 配置内容:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<appSettings>
</appSettings>
<log4net>
<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
<!--AppID 150202,用于区分哪个应用的日志 -->
<file value="D:\Log4Net\150202\" />
<rollingStyle value="Composite" />
<datePattern value="yyyy-MM-dd".log"" />
<staticLogFileName value="false" />
<param name="Encoding" value="utf-8" />
<maximumFileSize value="100MB" />
<countDirection value="0" />
<maxSizeRollBackups value="100" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="记录时间:%date 线程:[%thread] 日志级别:%-5level 记录类:%logger 日志消息:%message%newline" />
</layout>
</appender>
<logger name="FileLogger" additivity="false">
<level value="DEBUG" />
<appender-ref ref="FileAppender" />
</logger>
</log4net>
</configuration>
注意了:
- maximumFileSize 设置为 100MB;请给 countDirection 设置为大于 -1 的整数;maxSizeRollBackups 设置为 100。
- 日志文件内容规范:日志文件中的每条日志内容要求是“记录时间 线程 日志级别 出错类 日志消息”。
3.2、日志查询
基于 Kibana 查询日志(访问地址:http://139.198.13.12:4800/),主要通过以下几个步骤实现:
- 选择业务索引库。
- 选择日期范围。
- 输入待查找的内容实现精确查询,也可以通过输入 * 实现模糊查询。
- 点击每条日志的展开图标,可以查看该条日志的详细信息。
- 在 Kibana 界面的左侧区域,自上而下依次是索引库选择框、选中字段集合列表(Selected Fields)、可用字段集合列表(Available Fields)。通过添加可用字段到选中字段集合列表中来改变 Kibana 右侧的日志表格呈现。
请参考如下图所示:

Kibana 查询日志界面
四、Demo 下载及更多资料
- Log4NetDemo 下载地址:https://github.com/das2017/Log4NetDemo
- ELK 官网:https://www.elastic.co/
- 正则表达式配置说明:https://www.elastic.co/guide/en/beats/filebeat/current/regexp-support.html
中小型研发团队架构实践七:集中式日志ELK的更多相关文章
- 中小型研发团队架构实践:分布式协调服务ZooKeeper
一.ZooKeeper 是什么 Apache ZooKeeper 由 Apache Hadoop 的子项目发展而来,于 2010 年 11 月正式成为了 Apache 的顶级项目. 相关厂商内容 优秀 ...
- 中小型研发团队架构实践:任务调度Job
一.Job 简介 Job 类似于数据库中的作业,多用于实现定时执行任务.适用场景主要包括定时轮询数据库同步.定时处理数据.定时邮件通知等. 我们的 Job 分为操作系统级别定时任务 WinJob 和 ...
- 中小型研发团队架构实践:Redis快速入门及应用
Redis的使用难吗?不难,Redis用好容易吗?不容易.Redis的使用虽然不难,但与业务结合的应用场景特别多.特别紧,用好并不容易.我们希望通过一篇文章及Demo,即可轻松.快速入门并学会应用. ...
- 中小型研发团队架构实践六:如何用好消息队列RabbitMQ?
一.写在前面 使用过分布式中间件的人都知道,程序员使用起来并不复杂,常用的客户端 API 就那么几个,比我们日常编写程序时用到的 API 要少得多.但是分布式中间件在中小研发团队中使用得并不多,为什么 ...
- 中小型研发团队架构实践九:任务调度Job
一.Job 简介 Job 类似于数据库中的作业,多用于实现定时执行任务.适用场景主要包括定时轮询数据库同步.定时处理数据.定时邮件通知等. 我们的 Job 分为操作系统级别定时任务 WinJob 和 ...
- 中小型研发团队架构实践八:分布式协调服务ZooKeeper
一.ZooKeeper 是什么 Apache ZooKeeper 由 Apache Hadoop 的子项目发展而来,于 2010 年 11 月正式成为了 Apache 的顶级项目. ZooKeeper ...
- 中小型研发团队架构实践五:Redis快速入门及应用
Redis的使用难吗?不难,Redis用好容易吗?不容易.Redis的使用虽然不难,但与业务结合的应用场景特别多.特别紧,用好并不容易.我们希望通过一篇文章及Demo,即可轻松.快速入门并学会应用. ...
- 中小型研发团队架构实践三:微服务架构(MSA)
一.MSA 简介 1.1.MSA 是什么 微服务架构 MSA 是 Microservice Architect 的简称,它是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相通讯.互相 ...
- 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问
中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...
随机推荐
- git 拖下laravel 代码后报错 Warning: require(D:\WWW\laravel\bootstrap/../vendor/autoload.php
omposer install 执行 Problem 1 - Installation request for doctrine/annotations v1.5.0 -> sat ...
- Spark MLlib中的OneHot哑变量实践
在机器学习中,线性回归和逻辑回归算是最基础入门的算法,很多书籍都把他们作为第一个入门算法进行介绍.除了本身的公式之外,逻辑回归和线性回归还有一些必须要了解的内容.一个很常用的知识点就是虚拟变量(也叫做 ...
- 应该怎么理解 app = Flask(__name__)
初始化生成一个app对象,这个对象就是Flask的当前实例对象,后面的各个方法调用都是这个实例Flask会进行一系列自己的初始化,比如web API路径初始化,web资源加载,日志模块创建等.然后返回 ...
- leetcode-64-最小路径和
题目描述: 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1 ...
- 【xsy1143】 兔子的数字 搜索
题目大意:请找到第$k$大的数,满足各位数字之和等于各位数字之积.其中$k≤10^{18}$. 首先我们要确定这个第$k$大的数有多大 我们用$f[i][j][he][ji]$表示我们要搜索一个$i$ ...
- Java虚拟机的内存组成
查了诸多的地方看到的都是这样一句话,我也Copy过来. 按照官方的说法:"Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时创 ...
- SS配置
{ "server":"0.0.0.0", "server_port":8388, "local_address": & ...
- 程序模拟HTTP请求
1. 使用HttpClient 前面拼接StringContent string strContent = "client_id=client&client_secret=secre ...
- PullToRefreshListView 进入界面不能立即显示刷新控件的bug 解决方案
1.首先定位到PullToRefreshListView.java这个文件 2.找到onRefreshing(final boolean doScroll)方法 @Override protected ...
- WordPress导航菜单函数
导航菜单是每一个WordPress主题必须的元素,如果你要制作一个WordPress主题,那就必须熟悉WordPress导航菜单注册函数 register_nav_menus() 和 导航菜单调用函数 ...