首页 文章 精选 留言 我的

精选列表

搜索[GA4集成],共10008篇文章
优秀的个人博客,低调大师

ELK+kafka集成

1、因为本项目采用的log4j2,所以在log4j2中直接配置 <Kafkaname="Kafka"topic="XX_log"> <PatternLayoutpattern="%d{yyyy-MM-ddHH:mm:ss}||%p||%c{1}||XX_web||%m%n"/> <Propertyname="bootstrap.servers">127.0.0.1:9092</Property> <Propertyname="timeout.ms">500</Property> </Kafka> PatternLayout 中格式采用了||将内容连接起来目的为了logstash进行切分,其中增加timeout.ms属性为了保证日志系统挂掉的情况不会对业务系统产生较大影响,当然kafka可以采用集群的方式,bootstrap.servers多个地址用“,”分隔。XX_web代表当前业务平台。 2、搭建kafka集群这里就不多介绍了官网很全, zookeeper.connect=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 3、创建logstash动态模板 { "template":"*", "settings":{ "index.refresh_interval":"5s", "number_of_replicas":"0", "number_of_shards":"3" }, "mappings":{ "_default_":{ "_all":{ "enabled":false }, "dynamic_templates":[ { "message_field":{ "match":"message", "match_mapping_type":"string", "mapping":{ "type":"string", "index":"analyzed" } } }, { "string_fields":{ "match":"*", "match_mapping_type":"string", "mapping":{ "type":"string", "index":"not_analyzed" } } } ], "properties":{ "dateTime":{ "type":"date", "format":"yyy-MM-ddHH:mm:ss" }, "@version":{ "type":"integer", "index":"not_analyzed" }, "context":{ "type":"string", "index":"analyzed" }, "level":{ "type":"string", "index":"not_analyzed" }, "class":{ "type":"string", "index":"not_analyzed" }, "server":{ "type":"string", "index":"not_analyzed" } } } } } 4、配置logstash input{ kafka{ zk_connect=>"127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183" group_id=>"logstash" topic_id=>"XX_log" reset_beginning=>false consumer_threads=>5 decorate_events=>true } } filter{ mutate{ split=>["message","||"] add_field=>{ "dateTime"=>"%{[message][0]}" } add_field=>{ "level"=>"%{[message][1]}" } add_field=>{ "class"=>"%{[message][2]}" } add_field=>{ "server"=>"%{[message][3]}" } add_field=>{ "context"=>"%{[message][4]}" } remove_field=>["message"] } date{ match=>["logdate","yyyy-MM-ddHH:mm:ss"] } } output{ elasticsearch{ hosts=>["127.0.0.1:9200"] index=>"XX_log-%{+YYYY-MM}" codec=>"json" manage_template=>true template_overwrite=>true flush_size=>50000 idle_flush_time=>10 workers=>2 template=>"E:\logstash\template\template_log.json" } } 按照年月将日志保存进ES索引中index => "XX_log-%{+YYYY-MM}",logstash从kafka集群中读取日志信息。 5、搭建ZK集群,这里就不多介绍了,网上资料比较多 6、搭建ES集群,ES集群比较简单,设置的参数不要太多就可以使用。 7、配置kibana server.port:5601#服务端口 #Thehosttobindtheserverto. server.host:"115.28.240.113" elasticsearch.url:http://127.0.0.1:9200ES地址-集群 kibana.index:"kibana" 8、版本 JKD 1.7 ES-2.4, logstash 2.4, kafka-2.10,kibana-4.6.4

优秀的个人博客,低调大师

HBase与Eclipse集成

1 开发环境 1、系统:Windows 2、IDE工具:Eclipse-Juno 3、HBase-0.98.4-hadoop1 2 前提条件 1、已经按照“Hadoop”目录中“HBase安装”文章,搭建起了HBase集群,并且集群已经启动。 3 项目布局 4 开发流程 4.1 新建项目 可以普通项目,也可以Web项目。此处新建Java Web项目:CloudDataBase。 4.2 添加JAR包 进入HBase文件下的lib目录,拷贝该目录下的所有Jar包,复制到项目CloudDataBase\WebContent\WEB-INF\lib文件夹下: 若是普通java,那么可以再项目上点击右键,选择Propertie,在弹出的快捷菜单中选择“Java Build Path”对话框,再单击Libraries选项卡,在该选项卡下单击“Add External JARs”按钮,定位到HBase文件下的lib目录,并选取其中的所有Jar包。 (Propertie->Java Build Path->Libraries-> Add External JARs) 4.3 添加hbase-site.xml配置文件 在工程根目录下创建一个名字为“conf”的文件夹,从已经搭建好的HBase集群中,找到$HBASE_HOME/conf/目录中的hbase-site.xml文件,并将其复制到该文件夹中(比如,我搭建好的集群,该文件在Linux服务器中“/opt/hbase-0.98.4/conf/”目录下。注意,需要是已经配置好的HBase集群中的hbase-site.xml文件,刚下载的HBase部署文件中的该文件是不能使用的)。 再次右键点击项目,选择Propertie->Java Build Path->Libraries->Add Class Folder,然后选择conf文件夹。 4.4 在windows中添加集群的hosts信息 windows下开发HBase应用程序,而HBase部署在linux环境中,在运行调试时会出现无法找到主机,类似异常信息如下:java.net.UnknownHostException: unknown host: master 解决方案: 在C:\WINDOWS\system32\drivers\etc\hosts文件中添加如下信息 [server_IP] [server_name] 比如,针对我之前搭建的集群,添加的内容如下: 4.5 编写代码 4.6 运行 4.7 查看结果 5 参考资料 http://www.cnblogs.com/jingyunyb/p/3392506.html

优秀的个人博客,低调大师

Istio on ACK集成生态(1): 集成TSDB助力可观测性存储

阿里云容器服务Kubernetes(简称ACK)支持一键部署Istio,可以参考文档在ACK上部署使用Isito。Istio on ACK提供了丰富的监控能力,为网格中的服务收集遥测数据,其中Mixer是负责提供策略控制和遥测收集的Istio组件。使用Prometheus进行监控是Istio提供的监控能力之一。Prometheus是一个开源的监控和报警系统,Prometheus依赖少,功能齐全,广泛用于Kubernetes集群的监控系统中。Istio自0.8版本开始默认将Prometheus包含在内,Mixer支持对接到Prometheus监控设施的Adapter。用户可以通过查询service或pod看到Prometheus的运行状态和地址。也可以通过简洁明了的Prometheus的UI界面查看监测数据。 Prometheus的存

优秀的个人博客,低调大师

Spring Boot项目集成 UidGenerator

前言 UidGenerator 基于snowflake算法实现 UidGenerator 由百度开发,基于SnowFlake算法的唯一ID生成器。UidGenerator 已组件的形式工作在应用项目中,支持自定义workeid位数和初始化策略,从而适用docker等虚拟化环境下实例自动重启等场景。 准备一个maven项目,构建两个模块。分别作为使用方和提供方。(建两个模块主要是为了“造轮子”,其他模块或项目可以直接引用,无需关心uid配置,如果没有分模块,可以忽略构建两个模块) 下载uid源码,放在项目中,开源地址https://github.com/baidu/uid-generator 数据库建表 DROP TABLE IF EXISTS WORKER_NODE;CREATE TABLE WORKER_NODE ( ID BIGINT NOT NULL AUTO_INCREMENT COMMENT 'auto increment id', HOST_NAME VARCHAR(64) NOT NULL COMMENT 'host name', PORT VARCHAR(64) NOT NULL COMMENT 'port',TYPE INT NOT NULL COMMENT 'node type: ACTUAL or CONTAINER', LAUNCH_DATE DATE NOT NULL COMMENT 'launch date', MODIFIED TIMESTAMP NOT NULL COMMENT 'modified time', CREATED TIMESTAMP NOT NULL COMMENT 'created time',PRIMARY KEY(ID)) COMMENT='DB WorkerID Assigner for UID Generator',ENGINE = INNODB; Spring 配置 CachedUidGennerator: UidGenerator 有两个具体的实现类,分别是 DefaultUidGenerator 和 CachedUidGenerator, 官方推荐使用性能较强的 CachedUidGenerator。 我们直接引用 UdiGenerator源码中的 cached-uid-spring.xml文件,使用默认配置 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <!-- UID generator --> <bean id="disposableWorkerIdAssigner" class="com.baidu.fsg.uid.worker.DisposableWorkerIdAssigner" /> <bean id="cachedUidGenerator" class="com.baidu.fsg.uid.impl.CachedUidGenerator"> <property name="workerIdAssigner" ref="disposableWorkerIdAssigner" /> <!-- 以下为可选配置, 如未指定将采用默认值 --> <!-- RingBuffer size扩容参数, 可提高UID生成的吞吐量. --> <!-- 默认:3, 原bufferSize=8192, 扩容后bufferSize= 8192 << 3 = 65536 --> <!--<property name="boostPower" value="3"></property>--> <!-- 指定何时向RingBuffer中填充UID, 取值为百分比(0, 100), 默认为50 --> <!-- 举例: bufferSize=1024, paddingFactor=50 -> threshold=1024 * 50 / 100 = 512. --> <!-- 当环上可用UID数量 < 512时, 将自动对RingBuffer进行填充补全 --> <!--<property name="paddingFactor" value="50"></property>--> <!-- 另外一种RingBuffer填充时机, 在Schedule线程中, 周期性检查填充 --> <!-- 默认:不配置此项, 即不实用Schedule线程. 如需使用, 请指定Schedule线程时间间隔, 单位:秒 --> <!--<property name="scheduleInterval" value="60"></property>--> <!-- 拒绝策略: 当环已满, 无法继续填充时 --> <!-- 默认无需指定, 将丢弃Put操作, 仅日志记录. 如有特殊需求, 请实现RejectedPutBufferHandler接口(支持Lambda表达式) --> <!--<property name="rejectedPutBufferHandler" ref="XxxxYourPutRejectPolicy"></property>--> <!-- 拒绝策略: 当环已空, 无法继续获取时 --> <!-- 默认无需指定, 将记录日志, 并抛出UidGenerateException异常. 如有特殊需求, 请实现RejectedTakeBufferHandler接口(支持Lambda表达式) --> <!--<property name="rejectedPutBufferHandler" ref="XxxxYourPutRejectPolicy"></property>--> </bean> </beans> 引入cached-uid-spring.xml配置文件,在我们自己新建的 UidConfig中 package com.xxx.uid.config; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; /** * @author lishuzhen * @date 2020/8/11 16:10 */ @Configuration @ImportResource(locations = {"classpath:/uid/cached-uid-spring.xml"}) public class UidConfig { } 在另一个模块中maven引入,创建一个UidGenUtils工具类,方便使用 package com.xxxx.utils; import com.xxx.uid.UidGenerator; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * @author lishuzhen * @date 2020/8/11 16:13 */ @Component public class UidGenUtils { @Resource private UidGenerator uidGenerator; public long getUid() { return uidGenerator.getUID(); } public String getUidStr() { return String.valueOf(uidGenerator.getUID()); } }

优秀的个人博客,低调大师

EFK实战二 - 日志集成

前言 在EFK基础架构中,我们需要在客户端部署Filebeat,通过Filebeat将日志收集并传到LogStash中。在LogStash中对日志进行解析后再将日志传输到ElasticSearch中,最后通过Kibana查看日志。 上文已经搭建好了EFK的基础环境,本文我们通过真实案例打通三者之间的数据传输以及解决EFK在使用过程中的一些常见问题。 首先看一下实际的业务日志 2020-01-0910:03:26,719INFO========GetCostCenterStart=============== 2020-01-09 10:03:44,267 WARN 成本中心编码少于10位!{"deptId":"D000004345","companyCode":"01"} 2020-01-0910:22:37,193ERRORjava.lang.IllegalStateException:SessionImpl[abcpI7fK-WYnW4nzXrv7w,]:can'tcallgetAttribute()whensessionisnolongervalid. atcom.caucho.server.session.SessionImpl.getAttribute(SessionImpl.java:283) atweaver.filter.PFixFilter.doFilter(PFixFilter.java:73) atcom.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87) atweaver.filter.MonitorXFixIPFilter.doFilter(MonitorXFixIPFilter.java:30) atweaver.filter.MonitorForbiddenUrlFilter.doFilter(MonitorForbiddenUrlFilter.java:133) 「日志组成格式为:」 时间 日志级别 日志详情 那么我们的主要任务就是将这段日志正常写入EFK中。 filebeat安装配置 下载filebeat7.5.1 将下载后的文件上传至服务器并解压tar -zxvf filebeat-7.5.1-linux-x86_64.tar.gz 修改filebeat.yml, filebeat.inputs: -type:log enabled:true paths: -/app/weaver/Resin/log/xxx.log 此段配置日志输入,指定日志存储路径 output.logstash: #TheLogstashhosts hosts:["172.31.0.207:5044"] 此段配置日志输出,指定Logstash存储路径 启动filebeat ./filebeat -e -c filebeat.yml 如果需要静默启动,则使用 nohup ./filebeat -e -c filebeat.yml & 命令启动即可。 logstash配置 logstash的配置主要分为三段 input,filter,output。input用于指定输入,主要是开放端口给Filebeat用于接收日志filter用于指定过滤,对日志内容进行解析过滤。output用于指定输出,直接配置ES的地址即可 input{ beats{ port=>5044 } } output{ elasticsearch{ hosts=>["http://172.31.0.127:9200"] index=>"myindex-%{+YYYY.MM.dd}" user=>"elastic" password=>"xxxxxx" } } 我们配置好logstash后通过命令重启logstash docker-compose -f elk.yml restart logstash 经过上述两步配置后应用程序往日志文件写入日志,filebeat会将日志写入logstash。在kibana查看写入的日志结果如下: 日志显示有2个问题: 由于错误日志堆栈信息有多行,在kibana中展示成了多行,数据查看很乱。需要将堆栈异常整理成一行显示。 需要对日志进行解析,拆成“时间 日志级别 日志详情”的显示格式。 优化升级 在filebeat中设置合并行 filebeat默认是行传输的,但是我们的日志肯定是多行一个日志,我们要把多行合并到一起就要找到日志的规律。比如我们的日志格式全都是以时间格式开头,所以我们在filebeat中 filebeat.inputs区域添加如下几行配置 #以日期作为前缀 multiline.pattern:^\d{4}-\d{1,2}-\d{1,2} #开启多行合并 multiline.negate:true #合并到上一行之后 multiline.match:after 在logstash中设置对日志的解析 将日志解析成“时间 日志级别 日志详情”的展示格式,所以我们需要在logstash配置文件中添加filter段 filter { grok{ match => { "message" => "(?<date>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}),\d{3} %{LOGLEVEL:loglevel} (?<des>.*)" } } } 这里主要是使用grok语法对日志进行解析,通过正则表达式对日志进行过滤。大家可以通过kibana里的grok调试工具进行调试 配置完成后我们重新打开kibana Discover界面查看日志,符合预期,完美! 常见问题 kibana 乱码 这个主要原因还是客户端日志文件格式有问题,大家可以通过 file xxx.log查看日志文件的编码格式,如果是ISO8859的编码基本都会乱码,我们可以在filebeat配置文件中通过encoding指定日志编码进行传输。 filebeat.inputs: -type:log enabled:true paths: -/app/weaver/Resin/log/xxx.log encoding:GB2312 kibana 提取字段出错 如上所示,打开kibana Discover面板时出现此异常,大家只要删除ES中的 .kibana_1索引然后重新访问Kibana即可。 查看周围文件 我们在终端查看日志某关键字时一般会查上下文信息便于排查问题,如经常用到的指令 cat xxx.log | grep -C50 keyword,那么在Kibana中如何实现这功能呢。 在Kibana中搜索关键字,然后找到具体日志记录,点击左边向下箭头,然后再点击“查看周围文档”即可实现。 动态索引 我们日志平台可能需要对接多个业务系统,需要根据业务系统建立不同的索引。 在filebeat中给日志打上标记 -type:log ...... fields: logType:oabusiness 在logstash中根据标记生成索引 input { beats { port => 5044 } } filter { if [fields][logType] == "oabusiness" { grok{ match => { "message" => "(?<date>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}),\d{3} %{LOGLEVEL:loglevel} (?<des>.*)" } } } } output { elasticsearch { hosts => ["http://172.31.0.207:9200"] index => "%{[fields][logType]}-%{+YYYY.MM.dd}" user => "elastic" password => "elastic" } } 如果本文对你有帮助, 别忘记来个三连: 点赞,转发,评论 本文分享自微信公众号 - JAVA日知录(javadaily)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

阿里云AMQP Springboot集成

概述 本文主要介绍如何通过 Spring boot 连接阿里云AMQP服务。 操作步骤 1、示例程序下载,下载地址。 2、参数配置,AMQP管理控制台获取。 resources -> application.properties spring.application.name=rabbitmq-demo spring.rabbitmq.host=18********617278.mq-amqp.cn-hangzhou-a.aliyuncs.com spring.rabbitmq.port=5672 spring.rabbitmq.username=****** spring.rabbitmq.password=****** spring.rabbitmq.virtual-host=****** spring.rabbitmq.temp

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册