用户云卷云舒 发表于 昨天 15:27

基于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]
查看完整版本: 基于docker微服务日志ELK+Kafka搭建