基于docker微服务日志ELK+Kafka搭建
ELK 是 Elasticsearch 、 Logstash 、 Kibana 的简称 Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和 JAVA API等结构提供高效搜索功能,可扩展的分布式体系。它构建于Apache Lucene搜索引擎库之上。 Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包罗体系日志、错 误日志和自定义应用程序日志。它可以从许多泉源吸收日志,这些泉源包罗 syslog、消息传递(比方 RabbitMQ)和JMX,它能够以多种方式输出数据,包罗电子邮件、websockets和Elasticsearch。 Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数 据。它使用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们本身的数据的定制仪表板视 图,还允许他们以特别的方式查询和过滤数据 使用 spring aop 举行日志网络,然后通过 kafka 将日志发送给 logstash , logstash 再将日志写入 elasticsearch ,这样 elasticsearch 就有了日志数据了,末了,则使用 kibana 将存放在 elasticsearch 中的日志数据显示出来,而且可以做实时的数据图表分析等等。为什么要用ELK 最开始我些项目的时间,都习惯用log4j来把日志写到log文件中,后来项目有了高可用的要求,我们就 举行了分布式部署web,这样我们还是用log4j这样的方式来记录log的话,那么就有N台机子的N个log 目录,这个时间查找log起来非常贫苦,不知道问题用户出错log是写在哪一台服务器上的,后来,想到 一个办法,干脆把log直接写到数据库中去,这样做,虽然解决了查找异常信息便利性的问题了,但存 在两个缺陷 : 1,log记录很多多少,表不够用啊,又得分库分表了, 2,连接db,如果是数据库异常,那边log就丢失了,那么为相识决log丢失的问题,那么还得先将log写 在本地,然后等db连通了后,再将log同步到db,这样的处理办法,感觉是越搞越复杂。 ELK职能分工 logstash做日志对接,接受应用体系的log,然后将其写入到elasticsearch中,logstash可以支持N 种log渠道,kafka渠道写进来的、和log目录对接的方式、也可以对reids中的log数据举行监控读 取,等等。 elasticsearch存储日志数据,方便的扩展特效,可以存储充足多的日志数据。 kibana则是对存放在elasticsearch中的log数据举行:数据展现、报表展现,而且是实时的。 1.docker环境搭建ELK+Kafka
搭建elasticsearch集群环境 将elasticsearchCluster文件夹拷贝假造机 使用Xshell连接服务器,在服务器上切换至elasticsearchCluster目录 赋权 chmod 777 *.sh 创建镜像 ./createElasticsearchImage.sh 创建容器 ./createElasticsearchContainer.sh 设置宿主机内存 sysctl -w vm.max_map_count=262144 重新启动 docker systemctl restart docker 根据集群分配修改 kibana.yml 中 elasticsearch 的所在 https://i-blog.csdnimg.cn/direct/14f0b786a00c4c87879a0e74750e1293.png docker cp kibana.yml kgc_kibana:/usr/local/kibana-6.2.4-linux-x86_64/config/ 重新启动kibana docker restart kgc_kibana 安装logstash与kafka,镜像 修改kafka的server.properties连接所在 # 修改为宿主机 IP 如 192.168.31.113 advertised.listeners = PLAINTEXT : //kafka : 9092
修改logstash.conf文件
input{ kafka { bootstrap_servers => ["kafka:9092"] # 修改为 kafka 的 IP auto_offset_reset => "latest" 将文件夹 kafka 与 logstash 复制到服务器,实行命令,生产镜像 ProviderController.java consumer_threads => 5 decorate_events => true topics => ["user-error"] # 数组形式,可以填写多个 type => "user-error" # 可以自由指定 } } output { elasticsearch { hosts => [ "elasticsearch:9200"] # 指向 Elasticsearch 服务所在,可以有多个,注意 IP 和端口和现实保持同等 index => "%{}log-%{+YYYY-MM-dd}" } } 将文件夹kafka与logstash复制到服务器,实行命令,生产镜像
docker build -t kgc/logstash 路径 /logstash/ 根据镜像,生产容器
#kafka docker run -d --name kgc_kafka -p 9092:9092 --network kgc_elastic_cluster -- network-alias kafka kgc/kafka #logstash docker run -d -it --name kgc_logstash --network kgc_elastic_cluster --network alias logstash kgc/logstash
编写程序,修改端标语与连接kafka
server : port : 8088 spring : kafka : producer : bootstrap-servers : 192.168.31.113 : 9092 ProviderController.java
@RestController
public class ProviderController {
@Autowired
private KafkaTemplate<String, String> KafkaTemplate;
@RequestMapping(value = "/test" )
public String test() throws Exception{
System.out.println(KafkaTemplate);
for (int i = 0; i < 10; i++) {
KafkaTemplate.send("wangzhuanyun", "dm", "wzy222222--->" + i);
}
return "send msg over...";
}
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]