ELK日志系统之通用应用程序日志接入方案
日志规范
规范的日志存放路径和输出格式将为我们后续的收集和分析带来极大的方便,无需考虑各种不同路径、格式的兼容问题,只需要针对固定几类日志做适配就可以了,具体的规范如下:
日志存放路径规范
项目日志只能输出到固定的位置,例如/data/logs/
目录下 同一类型(例如java web)的日志文件名保持统一,例如都叫
application.log
一个类型的项目可以记录多个不同的日志文件,例如
exception.log
和 business.log
日志输出格式规范
日志输出必须为JSON格式,这个很重要 同一类型的项目应采用统一的日志输出标准,尽量将日志输出模块化,所有项目引用同一模块
输出日志中必须包含标准时间(timestamp)、应用名称(appname)、级别(level)字段,日志内容记录清晰易懂
日志信息级别规范
日志级别 | 说明 | 数值 |
---|---|---|
debug | 调试日志,日志信息量最多 | 7 |
info | 一般信息日志,最常用的级别 | 6 |
notice | 最具有重要性的普通条件信息 | 5 |
warning | 警告级别 | 4 |
error | 错误级别,某个功能不能正常工作 | 3 |
critical | 严重级别,整个系统不能正常工作 | 2 |
alert | 需要立刻修改的日志 | 1 |
emerg | 内核崩溃等严重信息 | 0 |
从上到下级别依次从低到高,日志量从多到少,正确选择日志级别帮助后期快速排查问题
我们为什么要制定这样的规范?
基础镜像打包了运行项目的基础环境,例如spring cloud微服务项目,则打包了jre服务
规范了日志存放及输出后,我们可以把作为日志收集agent的filebeat一并打包进基础镜像,因为同一类型项目的日志路径、格式都是一致的,filebeat配置文件可以通用
这样我们在后续的部署过程中就不需要关心日志相关的内容,只要项目镜像引用了这个基础镜像就能自动接入了我们的日志服务,实现日志的收集、处理、存储与展示
日志采集
我们通用日志采集方案如下图:
程序跑在容器里,容器内自带Filebeat程序收集日志
收集完成后传给kafka集群,logstash读取kafka集群数据写入elasticsearch集群kibana读取elasticsearch集群数据展示在web上,开发、运维等需要查看日志的用户登录kibana查看
Client端Filebeat配置
filebeat.prospectors:
- input_type: log
paths:
- /home/logs/app/business.log
- /home/logs/app/exception.log
json.message_key: log
json.keys_under_root: true
output.kafka:
hosts: ["10.82.9.202:9092","10.82.9.203:9092","10.82.9.204:9092"]
topic: filebeat_docker_java
Kafka接收到的数据格式
{"@timestamp":"2018-09-05T13:17:46.051Z","appname":"app01","beat":{"hostname":"52fc9bef4575","name":"52fc9bef4575","version":"5.4.0"},"classname":"com.domain.pay.service.ApiService","date":"2018-09-05 21:17:45.953+0800","filename":"ApiService.java","hostname":"172.17.0.2","level":"INFO","linenumber":285,"message":"param[{\"email\":\"TEST@163.COM\",\"claimeeIP\":\"123.191.2.75\",\"AccountName\":\"\"}]","source":"/home/logs/business.log","thread":"Thread-11","timestamp":1536153465953,"type":"log"}
Server端Logstash配置
input {
kafka {
bootstrap_servers => "10.82.9.202:9092,10.82.9.203:9092,10.82.9.204:9092"
topics => ["filebeat_docker_java"]
}
}
filter {
json {
source => "message"
}
date {
match => ["timestamp","UNIX_MS"]
target => "@timestamp"
}
}
output {
elasticsearch {
hosts => ["10.82.9.205", "10.82.9.206", "10.82.9.207"]
index => "filebeat-docker-java-%{+YYYY.MM.dd}"
}
}
都是基础配置很简单,不做过多解释,通过以上简单的配置就能实现任何应用程序的日志收集
日志展示
收集
日志到elasticsearch
之后,就可以通过kibana配置展示应用程序的日志了,方便开发及时发现问题,在线定位问题
写在最后通用的基础与前提是规范,规范做好了事半功倍
日志打印Json格式不方便本地查看?这个可以把日志输出格式当做配置写在配置文件中,不同环境加载不同配置,就跟开发环境加载开发数据库一样日志系统上线到现在稳定运行接近2年,除了刚开始有点不适应以为,都是越用越好用,现在他们已经离不开ELK日志系统了,大大提高了工作的效率
原文发布时间为:2018-09-6
本文作者:37丫37

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
ElasticSearch入门 附.Net Core例子
1.什么是ElasticSearch? Elasticsearch是基于Lucene的搜索引擎。它提供了一个分布式,支持多租户的全文搜索引擎,它具有HTTP Web界面和无模式JSON文档。 Elasticsearch是用Java开发的,根据Apache许可条款作为开源发布。 ----来自维基百科的解释 我个人的理解是Elasticsearch(以下简称ES)是一个支持分布式的全文搜索引擎,因为在海量数据搜索时,普通关系型、非关系型数据库因为IO读取、处理器运算能力的限制,导致查询效率难以提升,但是ES是分布式的(能把处理压力分摊给每个节点),而且它是给每个词创建索引,所以查询效率极高,堪称即时搜索。 而且ES能搭配Kibana,实现数据的可视化管理与数据分析。 Kibana仪表盘 2.ES中名词概念 2.1 Node和Cluster 前面所过ES是一个分布式搜索引擎,其本质是一个分布式数据库,可以多台计算机上的ES实例协同工作,这里面的某一台计算机上的某个ES实例,就可以称为一个Node(节点),所有的这些协同工作的实例,可以称为一个Cluster(集群)。 2.2 Index E...
- 下一篇
Spark性能优化:基于分区进行操作
版权声明:本文由董可伦首发于https://dongkelun.com,非商业转载请注明作者及原创出处。商业转载请联系作者本人。 https://blog.csdn.net/dkl12/article/details/82496977 我的原创地址:https://dongkelun.com/2018/09/02/sparkMapPartitions/ 前言(摘自Spark快速大数据分析) 基于分区对数据进行操作可以让我们避免为每个数据元素进行重复的配置工作。诸如打开数据库连接或创建随机数生成器等操作,都是我们应当尽量避免为每个元素都配置一次的工作。Spark 提供基于分区的map 和foreach,让你的部分代码只对RDD 的每个分区运行一次,这样可以帮助降低这些操作的代价。 当基于分区操作RDD 时,Spark 会为函数提供该分区中的元素的迭代器。返回值方面,也返回一个迭代器。除mapPartitions() 外,Spark 还有一些别的基于分区的操作符,见下表: 函数名 调用所提供的 返回的 对于RDD[T]的函数签名 mapPartitions() 该分区中元素的迭代器 返回的...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19