日志可分为系统日志、应用日志以及业务日志,系统日志给运维人员使用,应用日志给研发人员使用,业务日志给业务操做人员使用。咱们这里主要讲解应用日志,经过应用日志来了解应用的信息和状态,以及分析应用错误发生的缘由等。html
随着系统的日益复杂,大数据时代的来临,须要几十甚至上百台的服务器是常有的事,所以迫切须要有一套针对日志、且可以集中式管理的产品。ELK 就实现了集中式日志管理平台,该平台统一涵盖了分布式日志收集、检索、统计、分析以及对日志信息的 Web 管理等集中化管控。node
ELK 是 Elasticsearch、Logstash、Kibana 的简称,这三套开源工具组合起来能搭建一套强大的集中式日志管理平台。git
Elasticsearch 是个开源的分布式搜索引擎,提供搜索、分析、存储数据三大功能。它的特色有:分布式、自动发现、索引自动分片、索引副本机制、RESTful 风格接口、多数据源以及自动搜索负载等。github
Logstash 是一个开源的用来收集、解析、过滤日志的工具。支持几乎任何类型的日志,包括系统日志、业务日志和安全日志。它能够从许多来源接收日志,这些来源主要包括 Syslog、消息传递(例如 RabbitMQ)和 Filebeat;可以以多种方式输出数据,这些方式主要包括电子邮件、WebSockets 和 Elasticsearch。正则表达式
Kibana 是一个基于 Web 的友好图形界面,用于搜索、分析和可视化存储在 Elasticsearch 中的数据。它利用 Elasticsearch 的 RESTful 接口来检索数据,不只容许用户定制仪表板视图,还容许他们以特殊的方式查询、汇总和过滤数据。shell
下图是集中式日志管理 ELK 的架构图。出于性能的考虑,选择采用了 Beats+EK 的形式来组合搭建集中式日志管理系统。windows
ELK 架构浏览器
Elasticsearch 部署完成后,须要更改 elasticsearch.yml 配置文件中的主要属性:cluster.name、node.name、network.host、discovery.zen.ping.unicast.hosts。其中,当部署 Elasticsearch 时是以集群模式部署的,那么 discovery.zen.ping.unicast.hosts 这个属性才会须要被配置。安全
经过配置 filebeat-pipeline.conf 文件中的 Input、Filter(可选)和 Output 来完成对数据的采集、过滤和输出,以下图所示:服务器
Logstash 配置
而后以 filebeat-pipline.conf 文件启用 Logstash 服务,以下图所示:
启用 Logstash 服务
备注:因为采用的是 Beats+EK 这个方案来实现集中式日志管理,因此不须要配 Logstash。
经过更改 kibana.yml 配置文件内容,用来链接正确的 Elasticsearch 服务地址,一般只须要配置 elasticsearch.url 属性便可,请见下图的第一个图。配置完成后,执行【bin/kibana &】命令启用 Kibana 服务,请见下图的第二个图。最后就能够在浏览器中打开 Kibana 管理页面(访问地址:http://139.198.13.12:4800/)来查看日志。
Kibana 的配置说明
启用 Kibana 服务
filebeat.yml 配置文件内容主要包含 Filebeat、Output、Shipper(可选)、Logging(可选)四大部分,其中 Filebeat 主要定义监控的日志文件信息,Output 主要配置日志数据的输出目标。
filebeat.yml 文件中,主要属性值的命名规范以下:
filebeat.yml 的配置示例以下图所示:
filebeat.yml 的配置示例
日志文件存放在哪台服务器中,filebeat 服务就部署在哪台服务器中。在 windows 操做系统上启用 filebeat 服务的步骤:
一、在 windows 下开启搜索,输入 powershell,打开 powershell 所在文件位置,右键 powershell.exe 以管理员身份运行,进入 PowerShell 窗口。
或者以管理员身份启动 cmd.exe,输入命令 powershell,进入 PowerShell 窗口 。
注意:
请务必确保以管理员身份打开 PowerShell 窗口,不然的话在如下第 2 步中运行.ps1 脚本时,就会报没有权限建立 filebeat 服务的错误:
二、导向到 filebeat 执行程序所在目录,例如:cd 'E:\ELK\filebeat-1.3.0-windows',而后执行命令:powershell.exe -ExecutionPolicy UnRestricted -File .\install-service-filebeat.ps1。
三、以后能够在 PowerShell 窗口中经过如下几个命令来查看、启用以及中止 filebeat 服务:
一、日志存放路径规范:{盘符}:\Log4Net{AppID}\,其中 AppID 即为咱们所作项目的六位编码。例如:D:\Log4Net\110107\。
二、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>
注意了:
基于 Kibana 查询日志(访问地址:http://139.198.13.12:4800/),主要经过如下几个步骤实现:
请参考以下图所示:
Kibana 查询日志界面
转自http://www.infoq.com/cn/articles/architecture-practice-03-elk