分布式微服务基于kafka日志收集方案

背景

随着单应用的拆分,微服务数量逐渐增长。不可避免的对运维工作产生爆发式的增长,而日志作为日常运维工作中必不可少的环节。由于微服务分布式部署造成日志分散,日志查询较为繁琐,故引出此需求。

需求

收集各个微服务中产生的日志,并将其通过可视化页面进行展示。

项目分解

一期工程

  • 日志的集中收集工作
  • 日志可视化搜索
  • 制定简单日志规范,可按照应用+traceID+业务+日志内容(可能还会包含其他基础数据,以具体设计方案为准)
    • traceId单应用单实例内日志追踪ID
    • 日志内容暂不拆分具体业务类型下的日志格式

方案

在这里插入图片描述

  1. 每个微服务中增加向kafka推送日志模块,具体通过扩展logback的Appender进行实现,通过MDC增加traceID以及一些其他信息。
  2. logstash读取kafka数据,过滤信息推送ES。

日志规范设计

基于JSON文本
当前为V1.0字段定义格式

字段名称字段类型说明
versionString版本号
app_idString应用ID
由日志配置系统分配
service_nameString服务名称
send_timeDate日志写出时间
格式:yyyy-MM-dd HH:mm:ss,SSS
hostnameString主机名称
trace_idString日志追踪ID
bus_typeString业务类型
bus_versionString业务类型版本号
payloadString日志内容

ELK安装

版本:7.9.3

ES docker安装

参考文档

  1. 搜索仓库镜像
docker pull elasticsearch:7.9.3

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.9.3

  1. 一些指令

查看当前所有index

GET /_cat/indices?v

创建索引
创建一个名称为customer的索引,?pretty告诉服务响应一个美化的JSON

PUT /customer?pretty

创建一个索引数据

PUT /customer/doc/1?pretty
{
  "name": "John Doe"
}

响应

{
  "_index" : "customer",
  "_type" : "doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}
···
> 根据ID查询索引数据
```shell
PUT /customer/doc/1?pretty

响应

{
  "_index" : "customer",
  "_type" : "doc",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : { "name": "John Doe" }
}

删除索引

DELETE /customer?pretty
Kibana Docker安装

参考安装手册

docker pull kibana:7.9.3
docker run --link YOUR_ELASTICSEARCH_CONTAINER_NAME_OR_ID:elasticsearch -p 5601:5601 docker.elastic.co/kibana/kibana:7.9.3

如果安装docker pull超时可以尝试如下方法
vi /etc/docker/daemon.json

{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}

重启docker

systemctl restart docker
logstash Docker安装
docker pull logstash:7.9.3
# 将pipeline配置文件放置于宿主机/home/xbz/bin/es/conf/pipeline/下
docker run --rm -it -v /home/xbz/bin/es/conf/pipeline/:/usr/share/logstash/pipeline/ logstash:7.9.3

测试监听kafka输出到标准输出

### 监听kafka输出至标准输出
input {
    kafka {
        bootstrap_servers => "192.168.100.101:9092"
        topics => ["app-log"]
        codec => "json"
                group_id => "logstash_01"
    }
}

output {
        stdout {}
}

kafka数据推送ES

input {
    kafka {
        bootstrap_servers => "192.168.100.101:9092"
        topics => ["app-log"]
        codec => "json"
        group_id => "logstash_02"
    }
}

output{
    elasticsearch{
    hosts => ["192.168.100.101:9200"]
    index => "app-log-%{app_id}-%{+YYYY.MM.dd}"
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值