整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          精測(cè)電子申請(qǐng)一種探針卡制備方法專利,提高懸臂針密度和裝配效率

          融界 2024 年 7 月 28 日消息,天眼查知識(shí)產(chǎn)權(quán)信息顯示,武漢精毅通電子技術(shù)有限公司,武漢精測(cè)電子集團(tuán)股份有限公司申請(qǐng)一項(xiàng)名為“一種探針卡制備方法“,公開(kāi)號(hào) CN202410470504.3,申請(qǐng)日期為 2024 年 4 月。

          專利摘要顯示,本發(fā)明公開(kāi)了一種探針卡制備方法,屬于探針卡技術(shù)領(lǐng)域。所述制備方法包括:提供基板,并在基板進(jìn)行第一表面微加工,從而在基板上制備得到薄膜電路層,薄膜電路層中具有多個(gè)電路;在薄膜電路層依次進(jìn)行第二表面微加工、第三表面微加工和第四表面微加工,從而依次制備得到針底座層、針臂層和針尖層;對(duì)針底座層、針臂層和針尖層進(jìn)行分離去除,使得薄膜電路層上僅形成多個(gè)懸臂針,并去除基板的外邊緣結(jié)構(gòu),使得薄膜電路層的邊緣凸出布置;基于多個(gè)電路,通過(guò)將薄膜電路層外邊緣彎曲后連接 PCB 板。本發(fā)明實(shí)施例提供的一種探針卡制備方法,不僅可以便捷制備探針卡,還能提高懸臂針的密度,同時(shí)提高了裝配效率,有效促進(jìn)探針卡的發(fā)展。

          本文源自金融界

          各位小伙伴們,非常感謝你們對(duì)我們eBPF專題系列文章的持續(xù)關(guān)注和熱情支持!在之前的文章中,我們深入探討了如何手寫一個(gè)uprobe探測(cè)用戶態(tài)程序。許多熱心的小伙伴給我們發(fā)私信表達(dá)了他們對(duì)eBPF技術(shù)在數(shù)據(jù)庫(kù)領(lǐng)域應(yīng)用的濃厚興趣,并希望我們能分享更多的相關(guān)案例。為了滿足大家的期待,本文將帶您深入了解用戶態(tài)探測(cè)的另一種強(qiáng)大工具——USDT探針,以及它在數(shù)據(jù)庫(kù)優(yōu)化和監(jiān)控中的潛在應(yīng)用。

          本文是我們的eBPF專題系列第五篇純技術(shù)分享文章——如何手碼eBPF程序探測(cè)MySQL5.6 USDT,來(lái)實(shí)時(shí)識(shí)別數(shù)據(jù)庫(kù)可疑的連接訪問(wèn)來(lái)源(user/host)。

          USDT原理介紹

          USDT(User Statically-Defined Tracing)是動(dòng)態(tài)追蹤系統(tǒng) DTrace 的一部分,允許在用戶態(tài)應(yīng)用程序中定義靜態(tài)探針。這些探針提供了一個(gè)強(qiáng)大的調(diào)試和性能分析工具,可以在運(yùn)行時(shí)捕獲和分析應(yīng)用程序的行為,而無(wú)需修改應(yīng)用程序代碼或重新編譯。

          • 探針定義

          開(kāi)發(fā)人員在代碼中插入靜態(tài)探針點(diǎn)。這些探針點(diǎn)通常是一些宏定義,用于標(biāo)記需要追蹤的代碼位置。例如,在 MySQL 中可以看到類似于 #define MYSQL_COMMAND_START(arg0, arg1, arg2, arg3) 這樣的探針定義。

          • 探針注冊(cè)

          編譯應(yīng)用程序時(shí),這些探針會(huì)被注冊(cè)到探針表中,生成相應(yīng)的探針元數(shù)據(jù)。探針在正常運(yùn)行時(shí)是無(wú)操作的(noop),不會(huì)影響應(yīng)用程序性能。

          • 探針啟用

          當(dāng)需要調(diào)試或分析時(shí),調(diào)試器或追蹤工具(如 DTrace、SystemTap 或 BPF)可以附加到這些探針上,并啟用它們。當(dāng)探針被啟用時(shí),它們會(huì)執(zhí)行指定的動(dòng)作,例如記錄日志、捕獲堆棧跟蹤或收集性能數(shù)據(jù)。

          • 捕獲數(shù)據(jù)

          當(dāng)應(yīng)用程序運(yùn)行并觸發(fā)探針時(shí),探針會(huì)調(diào)用附加到它們的追蹤程序,執(zhí)行指定的調(diào)試或分析任務(wù)。這些任務(wù)可以包括打印變量值、收集性能指標(biāo)等。

          • 數(shù)據(jù)分析

          通過(guò)收集的數(shù)據(jù),開(kāi)發(fā)人員可以分析應(yīng)用程序的行為,找出性能瓶頸、調(diào)試問(wèn)題或優(yōu)化代碼。

          MySQL5.6 DTrace探針

          MySQL5.6源碼probes_mysql_nodtrace.h中定義了大量的DTrace探針,我們從中選取了以下兩個(gè)探測(cè):

          #define  MYSQL_COMMAND_START(arg0, arg1, arg2, arg3)
          #define  MYSQL_COMMAND_DONE(arg0)

          備注:MySQL源碼編譯指定編譯選項(xiàng)DENABLE_DTRACE=1才能開(kāi)啟Dtrace探針。關(guān)于使用DTrace跟蹤mysqld更多信息可查看該鏈接文檔(https://mysql.net.cn/doc/refman/5.6/en/dba-dtrace-server.html)

          MySQL源碼調(diào)用上述兩個(gè)Dtrace的位置:

          bool dispatch_command(enum enum_server_command command, THD *thd,
                    char* packet, uint packet_length)
          {
            NET *net= &thd->net;
            bool error= 0;
            DBUG_ENTER("dispatch_command");
            DBUG_PRINT("info",("packet: '%*.s'; command: %d", packet_length, packet, command));
          
            /* SHOW PROFILE instrumentation, begin */
          #if defined(ENABLED_PROFILING)
            thd->profiling.start_new_query();
          #endif
          
            /* DTRACE instrumentation, begin,start探針 */
            MYSQL_COMMAND_START(thd->thread_id, command, &thd->security_ctx->priv_user[0], (char *) thd->security_ctx->host_or_ip);
          
          ...  
          ...
            /* DTRACE instrumentation, end,End探針 */
            if (MYSQL_QUERY_DONE_ENABLED() || MYSQL_COMMAND_DONE_ENABLED())
            {
              int res MY_ATTRIBUTE((unused));
              res= (int) thd->is_error();
              if (command == COM_QUERY)
              {
                MYSQL_QUERY_DONE(res);
              }
              MYSQL_COMMAND_DONE(res);  
            }
          
          
            /* SHOW PROFILE instrumentation, end */
          #if defined(ENABLED_PROFILING)
            thd->profiling.finish_current_query();
          #endif
          
          
            DBUG_RETURN(error);
          }

          start探針中四個(gè)參數(shù)分別為:

          • thread_id : MySQL內(nèi)部分配的線程ID,即MySQL的Connection ID
          • command: SQL命令的枚舉類型
          • priv_user: 連接的用戶名
          • host_or_ip: 連接的客戶端IP

          end探針中只存在一個(gè)res參數(shù),該參數(shù)為會(huì)話執(zhí)行SQL的返回狀態(tài),非0表示SQL執(zhí)行異常。

          eBPF USDT如何實(shí)時(shí)識(shí)別MySQL異常訪問(wèn)來(lái)源?

          1)環(huán)境準(zhǔn)備

          準(zhǔn)備一臺(tái) Linux 機(jī)器,安裝好g++和bcc

          2)基于BCC工具實(shí)現(xiàn)探測(cè)MySQL5.6的Dtrace探針

          接下來(lái)我們將基于BCC,利用USDT寫一個(gè)eBPF程序,實(shí)時(shí)全量采集MySQL的訪問(wèn)來(lái)源(User/Host)。

          a)使用BCC對(duì)探針進(jìn)行探測(cè)

          #!/usr/bin/python
          from bcc import BPF,USDT
          
          # BPF program to attach to the command__start USDT probe
          bpf_text = """
          #include <uapi/linux/ptrace.h>
          
          int trace_command__start(void *ctx) {
              struct {
                  unsigned long conn_id;
                  int command;
                  char user[48];
                  char host[48];
              } args;
          
              bpf_usdt_readarg(1, ctx, &args.conn_id);
              bpf_usdt_readarg(2, ctx, &args.command);
              bpf_usdt_readarg_p(3, ctx, args.user, sizeof(args.user));
              bpf_usdt_readarg_p(4, ctx, args.host, sizeof(args.host));
          
          
              bpf_trace_printk("Command start:");
              bpf_trace_printk("Timestamp: %llu",bpf_ktime_get_ns());
              bpf_trace_printk("ConnectionId= %llu",args.conn_id);
              bpf_trace_printk("Command=%ld",args.command);
              bpf_trace_printk("User= %s",args.user);
              bpf_trace_printk("Host= %s",args.host);
              return 0;
          }
          
          
          int trace_command__done(void *ctx){
              bpf_trace_printk("Command done:");
              bpf_trace_printk("Timestamp: %llu",bpf_ktime_get_ns());
              int res = 0;
              bpf_usdt_readarg(1, ctx, &res);
              bpf_trace_printk("Res= %d",res);
              return 0;
          }
          """
          
          parser = argparse.ArgumentParser(description="Attach USDT probes to a running process")
          parser.add_argument("pid", type=int, help="The PID of the target process")
          args = parser.parse_args()
          pid = args.pid
          usdt = USDT(pid=pid)
          usdt.enable_probe(probe = "command__start", fn_name = "trace_command__start")
          usdt.enable_probe(probe = "command__done", fn_name = "trace_command__done")
          bpf = BPF(text = bpf_text, usdt_contexts = [usdt])
          bpf.trace_print()

          b)效果演示

          pid即為需要探測(cè)的mysqld的進(jìn)程號(hào),指定pid執(zhí)行python invoke_static.py即可開(kāi)啟探測(cè),當(dāng)該mysqld有SQL執(zhí)行時(shí),該探針將觸發(fā)并得到日志打印。如下示例:

          遠(yuǎn)程執(zhí)行連接MySQL的命令

          打印觀測(cè)的結(jié)果

          從上面的演示中我們能看到,客戶端和MySQL建立連接,顯示當(dāng)前連接的會(huì)話id、訪問(wèn)來(lái)源(user/host)、SQL Command、SQL執(zhí)行開(kāi)始時(shí)間、SQL結(jié)束時(shí)間、SQL是否正常執(zhí)行完成(Res)等信息。然后我們針對(duì)采集上來(lái)的數(shù)據(jù)就可以做分析了:

          • 如果存在user和host為非業(yè)務(wù)網(wǎng)段或者非業(yè)務(wù)賬號(hào),說(shuō)明存在異常來(lái)源訪問(wèn)。
          • 如果存SQL執(zhí)行耗時(shí)過(guò)長(zhǎng),可能存在可疑賬號(hào)在抽取數(shù)據(jù)。

          總結(jié)

          借助eBPF技術(shù)的強(qiáng)大能力,我們可以利用MySQL的USDT探針來(lái)捕獲和深入分析與數(shù)據(jù)庫(kù)SQL連接相關(guān)的操作活動(dòng)。通過(guò)本文的詳細(xì)闡述,您對(duì)否對(duì)eBPF技術(shù)在數(shù)據(jù)庫(kù)性能監(jiān)控和優(yōu)化方面的應(yīng)用有了更深層次的理解和認(rèn)識(shí)?

          您的MySQL異常來(lái)源訪問(wèn)識(shí)別出來(lái)了嗎?歡迎加入技術(shù)交流群與我們討論!

          DBdoctor推出長(zhǎng)久免費(fèi)版

          DBdoctor是一款企業(yè)級(jí)數(shù)據(jù)庫(kù)全方位性能監(jiān)控與診斷平臺(tái),致力于解決一切數(shù)據(jù)庫(kù)性能問(wèn)題。可以對(duì)商業(yè)數(shù)據(jù)庫(kù)、開(kāi)源數(shù)據(jù)庫(kù)、國(guó)產(chǎn)數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)一性能診斷。

          具備:SQL審核巡檢報(bào)表監(jiān)控告警存儲(chǔ)診斷審計(jì)日志權(quán)限管理等免費(fèi)功能,不限實(shí)例個(gè)數(shù),可基于長(zhǎng)久免費(fèi)版快速搭建企業(yè)級(jí)數(shù)據(jù)庫(kù)監(jiān)控診斷平臺(tái)。

          同時(shí)擁有:性能洞察、鎖分析、根因診斷、索引推薦、SQL發(fā)布前性能評(píng)估等高階功能,官網(wǎng)可快速下載,零依賴,一分鐘快速一鍵部署。

          如果您想要試用全部功能可添加公眾號(hào)自助申請(qǐng)專業(yè)版license。成為企業(yè)用戶可獲得產(chǎn)品定制、OpenAPI集成、一對(duì)一專家等高階服務(wù)。歡迎添加小助手微信了解詳細(xì)信息!

          1??免費(fèi)下載/在線試用:

          https://dbdoctor.hisensecloud.com/col.jsp?id=126

          ava Agent 服務(wù)器探針

          探針,用來(lái)收集和發(fā)送數(shù)據(jù)到歸集器。 參考官網(wǎng)給出的幫助 Setup java agent,我們需要使用官方提供的探針為我們達(dá)到監(jiān)控的目的,按照實(shí)際情況我們需要實(shí)現(xiàn)三種部署方式

          • IDEA 部署探針
          • Java 啟動(dòng)方式部署探針(我們是 Spring Boot 應(yīng)用程序,需要使用 java -jar 的方式啟動(dòng)應(yīng)用)
          • Docker 啟動(dòng)方式部署探針(需要做到一次構(gòu)建到處運(yùn)行的持續(xù)集成效果,本章節(jié)暫不提供解決方案,到后面的實(shí)戰(zhàn)環(huán)節(jié)再實(shí)現(xiàn))

          探針文件在 apache-skywalking-apm-incubating/agent 目錄下

          源碼目錄


          IDEA 部署探針

          繼續(xù)之前的案例項(xiàng)目,創(chuàng)建一個(gè)名為 hello-spring-cloud-external-skywalking 的目錄,并將 agent 整個(gè)目錄拷貝進(jìn)來(lái)

          image

          修改項(xiàng)目的 VM 運(yùn)行參數(shù),點(diǎn)擊菜單欄中的 Run -> EditConfigurations...,此處我們以 nacos-provider 項(xiàng)目為例,修改參數(shù)如下

          -javaagent:D:\Workspace\Others\hello-spring-cloud-alibaba\hello-spring-cloud-external-skywalking\agent\skywalking-agent.jar
          -Dskywalking.agent.service_name=nacos-provider
          -Dskywalking.collector.backend_service=localhost:11800
          
          

          image

          • -javaagent:用于指定探針路徑
          • -Dskywalking.agent.service_name:用于重寫 agent/config/agent.config 配置文件中的服務(wù)名
          • -Dskywalking.collector.backend_service:用于重寫 agent/config/agent.config 配置文件中的服務(wù)地址

          Java 命令行啟動(dòng)方式

          java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=nacos-provider -Dskywalking.collector.backend_service=localhost:11800 -jar yourApp.jar
          
          

          測(cè)試監(jiān)控

          啟動(dòng) nacos-provider 項(xiàng)目,通過(guò)觀察日志可以發(fā)現(xiàn),已經(jīng)成功加載探針 注: 如果無(wú)法訪問(wèn)到,請(qǐng)重啟skywalking容器

          image

          訪問(wèn)之前寫好的接口 http://localhost:8081/echo/hi 之后再刷新 SkyWalking Web UI,你會(huì)發(fā)現(xiàn) Service 與 Endpoint 已經(jīng)成功檢測(cè)到了

          image

          image

          至此,表示 SkyWalking 鏈路追蹤配置成功

          SkyWalking Trace 監(jiān)控

          SkyWalking 通過(guò)業(yè)務(wù)調(diào)用監(jiān)控進(jìn)行依賴分析,提供給我們了服務(wù)之間的服務(wù)調(diào)用拓?fù)潢P(guān)系、以及針對(duì)每個(gè) Endpoint 的 Trace 記錄。

          調(diào)用鏈路監(jiān)控

          點(diǎn)擊 Trace 菜單,進(jìn)入追蹤頁(yè)

          image

          點(diǎn)擊 Trace ID 展開(kāi)詳細(xì)信息

          image

          image

          上圖展示了一次正常的響應(yīng),總響應(yīng)時(shí)間為 185ms 共有一個(gè) Span(基本工作單元,表示一次完整的請(qǐng)求,包含響應(yīng),即請(qǐng)求并響應(yīng))

          Span /echo/{message} 說(shuō)明如下:

          • Duration:響應(yīng)時(shí)間 185 毫秒
          • component:組件類型為 SpringMVC
          • url:請(qǐng)求地址
          • http.method:請(qǐng)求類型

          服務(wù)性能指標(biāo)監(jiān)控

          點(diǎn)擊 Service 菜單,進(jìn)入服務(wù)性能指標(biāo)監(jiān)控頁(yè)

          image

          選擇希望監(jiān)控的服務(wù)

          image

          • Avg SLA: 服務(wù)可用性(主要是通過(guò)請(qǐng)求成功與失敗次數(shù)來(lái)計(jì)算)
          • CPM: 每分鐘調(diào)用次數(shù)
          • Avg Response Time: 平均響應(yīng)時(shí)間

          點(diǎn)擊 More Server Details... 還可以查看詳細(xì)信息

          image

          image

          上圖中展示了服務(wù)在一定時(shí)間范圍內(nèi)的相關(guān)數(shù)據(jù),包括:

          • 服務(wù)可用性指標(biāo) SLA
          • 每分鐘平均響應(yīng)數(shù)
          • 平均響應(yīng)時(shí)間
          • 服務(wù)進(jìn)程 PID
          • 服務(wù)所在物理機(jī)的 IP、Host、OS
          • 運(yùn)行時(shí) CPU 使用率
          • 運(yùn)行時(shí)堆內(nèi)存使用率
          • 運(yùn)行時(shí)非堆內(nèi)存使用率
          • GC 情況

          附A: 配置文件詳解

          /config/agent.config

          # 當(dāng)前的應(yīng)用編碼,最終會(huì)顯示在webui上。
          # 建議一個(gè)應(yīng)用的多個(gè)實(shí)例,使用有相同的application_code。請(qǐng)使用英文
          agent.application_code=Your_ApplicationName
          
          # 每三秒采樣的Trace數(shù)量
          # 默認(rèn)為負(fù)數(shù),代表在保證不超過(guò)內(nèi)存Buffer區(qū)的前提下,采集所有的Trace
          # agent.sample_n_per_3_secs=-1
          
          # 設(shè)置需要忽略的請(qǐng)求地址
          # 默認(rèn)配置如下
          # agent.ignore_suffix=.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg
          
          # 探針調(diào)試開(kāi)關(guān),如果設(shè)置為true,探針會(huì)將所有操作字節(jié)碼的類輸出到/debugging目錄下
          # skywalking團(tuán)隊(duì)可能在調(diào)試,需要此文件
          # agent.is_open_debugging_class = true
          
          # 對(duì)應(yīng)Collector的config/application.yml配置文件中 agent_server/jetty/port 配置內(nèi)容
          # 例如:
          # 單節(jié)點(diǎn)配置:SERVERS="127.0.0.1:8080" 
          # 集群配置:SERVERS="10.2.45.126:8080,10.2.45.127:7600" 
          collector.servers=127.0.0.1:10800
          
          # 日志文件名稱前綴
          logging.file_name=skywalking-agent.log
          
          # 日志文件最大大小
          # 如果超過(guò)此大小,則會(huì)生成新文件。
          # 默認(rèn)為300M
          logging.max_file_size=314572800
          
          # 日志級(jí)別,默認(rèn)為DEBUG。
          logging.level=DEBUG
          
          


          鏈接:https://www.jianshu.com/p/e81e35dc6406


          主站蜘蛛池模板: 精品一区二区三区免费| 国产乱码精品一区二区三区四川| 99精品一区二区三区无码吞精 | 精品无码国产一区二区三区AV| 无码人妻一区二区三区免费看 | 久久亚洲一区二区| 成人区精品一区二区不卡亚洲| 一区二区三区视频| 精品视频一区二区三区四区五区| 日本一区二区不卡在线| 免费看AV毛片一区二区三区| 国产精品毛片a∨一区二区三区| 一区二区三区在线免费看| 国模一区二区三区| 亚洲一区在线观看视频| 国产在线观看91精品一区| 亚洲美女高清一区二区三区| 精品一区二区久久| 精品福利一区二区三区| 久久久国产精品无码一区二区三区 | 国产一区二区三区亚洲综合 | 日韩在线一区二区| 亚洲AV无码一区二区乱孑伦AS| 一区免费在线观看| 日韩精品一区二区三区国语自制| 精品国产a∨无码一区二区三区| 中文字幕Av一区乱码| 99久久精品国产高清一区二区 | 精品亚洲一区二区| 亚洲av无码一区二区三区人妖 | 少妇激情AV一区二区三区| 亚洲A∨精品一区二区三区下载| 国产精品熟女视频一区二区 | 日本中文字幕在线视频一区| 麻豆AV一区二区三区久久| 日本中文一区二区三区亚洲| 精品一区二区三区四区在线播放 | jazzjazz国产精品一区二区| 精品一区二区三区在线观看视频| 日韩毛片一区视频免费| 亚洲熟妇AV一区二区三区宅男|