混合云管平台 openkube 日志系统介绍
作者:彭明明
一:背景
随着 openkube 系统一步步推进,混合云管理系统已显雏形,容器化部署逐步深入,应用部署依赖关系复杂、日志量庞大、运维和开发人员查看日志分析问题困难,目前搭建一套统一日志系统显的尤为重要。
二:目标
1.一站式日志平台
打造统一日志管理平台,统一日志采集、日志分析、日志查询,一站解决运维、开发人员日志查询、分析、问题定位的痛点。
2.跨平台日志采集
支持多平台、多语种、多样式日志定制化采集
3.关键字高效查询
在海量的历史记录中,只需输入关键字,即可轻松驾驭数据探勘工作,快速取得查询结果。
4.丰富灵活仪表盘
提供实时和全面的可视性仪表板,弹性组合仪表板的呈现信息,及时了解关键信息、最新风险与安全趋势。
三:选型
1.日志采集
基于上述比对:filebeat 部署简单,可靠性高,资源占用少(10M 内存资源),支持 kafka 数据源输出, 日志采集采用 filebeat 作为日志采集工具。
2.日志缓存
1. 防止因数据清洗不及时导致数据丢失
2. 支持多消费源消费数据
3. 支持数据回放
基于上述特点:日志缓存采用 kafka 作为数据缓存,kafka 具备高吞吐量、低延迟;持久性、可靠性;容错性;高并发等特性。
3.日志分析、存储、展示
针对日志数据清洗、分析、存储、展示,采用目前比较成熟的 ELK 系统。
1. logstash 负责日志数据清洗、分析、筛选、过滤把数据存储 ES。
2. ES 作为数据库存储清洗后的日志数据,提供 kibana 数据展示数据源。
3. kibana 渲染 ES 日志数据,支持关键字查询、日志监控看板等。
四:架构
1. k8s 容器开启标准输出模式将日志直接输出到 stdout、stderr,而 DockerEngine 接管 stdout 和 stderr 文件描述符,将日志接收后按照 DockerEngine 配置的 LogDriver json-file 输出日志。
2. filebeat 以 Daemonset 模式部署、收集 Pods 标准输出的 Json 格式日志转存至 kafka。
3. kafka 作为日志元原始数据存储介质,提供给多消费者获取数据。(日志实时查询、离线分析)
4. logstash 消费 kafka 日志,清洗、过滤日志数据,存储日志数据到 ES。
5. ES 存储经过清洗、过滤的日志数据,提供 Kibana 日志展示数据源。
6. Kibana 提供关键字实时查询日志、业务日志定制监控大盘等功能。
五:规范
1.分层规范
方便日志清洗、存储、展示把日志分层处理
(1)按照应用所处架构的层次划分
l 接入层(www)
l 服务层(service)
l 数据层(data)
(2)服务层应用依据开发语言进行二级划分
l java
l go
l python
2.应用部署
(1)为便于日志数据分类清洗、过滤、存储应用服务时要对服务打上标签,标识应用的日志类型,标签 key:openkube.deepexi.cloud/logtype
(2)应用标签规则
l 接入层、数据层以服务名称打标:ngnix、mysql
l 服务层依据服务开发语言打标:java、go、python
以 java 应用程序标签为例:
(3)标签表现:
3.输出格式openkube日志规范
方便日志数据清洗、过滤、多行合并日志输出有必要统一输出格式
l java 日志
l go 日志格式
l python 日志格式
(1)标准格式
(2)字段解析
4.存储索引
方便日志查询、问题定位日志存储索引由服务层次+日志标签+日志类型+时间(yyyy-mm-dd)组成
a.接入层 ngnix 服务存储索引
www-ngnix-accesslogs-yyyy-mm-dd
b.服务层 java 语言开发应用存储索引
service-java-logs-yyyy-mm-dd
c.数据层 mysql 存储索引
data-mysql-logs-yyyy-mm-dd
e.默认存储索引(针对没有标签的应用)
k8s-pods-default-logs-yyyy-mm-dd
f.系统日志存储索引
k8s-pods-systerm-logs-yyyy-mm-dd
六:规划
一期
1. 采集 pods 日志
2. 合并多行日志数据
3. 清洗日志数据并分类存储
4. 支持关键字快速查询日志功能
5. 提供日志查询平台
二期
1. 支持日志指标看板定制
2. 提供基本日志监控看板
了解更多产品详情请登录:https://www.deepexi.com/
评论