{"id":43169,"date":"2023-05-14T20:15:14","date_gmt":"2023-10-23T08:06:55","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8prometheus-grafana%e7%9b%91%e6%8e%a7oracle-transactional-event-queues\/"},"modified":"2024-04-30T04:09:23","modified_gmt":"2024-04-29T20:09:23","slug":"%e4%bd%bf%e7%94%a8prometheus-grafana%e7%9b%91%e6%8e%a7oracle-transactional-event-queues","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8prometheus-grafana%e7%9b%91%e6%8e%a7oracle-transactional-event-queues\/","title":{"rendered":"\u4f7f\u7528Prometheus + Grafana\u76d1\u63a7Oracle Transactional Event Queues"},"content":{"rendered":"<h1>\u9996\u5148<\/h1>\n<p>\u5728Oracle Database 23c(21c)\u4e2d\uff0c\u6709\u4e24\u4e2a\u514d\u8d39\u53ef\u7528\u7684\u529f\u80fd\uff0c\u4e00\u4e2a\u662f\u529f\u80fd\u5f3a\u5927\u7684\u6d88\u606f\u961f\u5217\u7cfb\u7edfAdvanced Queuing(AQ)\uff0c\u53e6\u4e00\u4e2a\u662f\u53ef\u4ee5\u5b9e\u73b0\u9ad8\u541e\u5410\u91cf\u6d88\u606f\u4ea4\u6362\u7684Transactional Event Queues(TxEventQ)\u3002\u672c\u6b21\u6211\u4eec\u60f3\u8981\u6784\u5efa\u4e00\u4e2a\u7528\u4e8e\u76d1\u63a7\u6027\u80fd\u7684TxEventQ Monitor\u7cfb\u7edf\u6765\u4f7f\u7528\u8fd9\u4e9b\u529f\u80fd\u3002\u6709\u5173TxEventQ\u7684\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u8003\u6b64\u5904\u7684\u6587\u6863\u6216\u4ee5\u4e0b\u7684Qiita\u6587\u7ae0\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u7ec4\u4ef6\u5305\u62ec\u4ee5\u4e0b\u4e09\u4e2a\u90e8\u5206\u3002<\/p>\n<p>Oracle Database Observability Exporter: Oracle Database\u7528\u306ePrometheus\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u3002\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a\u3057\u3001\u30e1\u30c8\u30ea\u30c3\u30af\u3092\u554f\u3044\u5408\u305b\u3066\u3001\u30e1\u30c8\u30ea\u30c3\u30af\u3092Prometheus\u69d8\u5f0f\u306e\u30e1\u30c8\u30ea\u30c3\u30af\u306b\u66f8\u5f0f\u5316\u3057\u307e\u3059\u3002<\/p>\n<p>Prometheus: \u76e3\u8996\u30b7\u30b9\u30c6\u30e0\u304a\u3088\u3073\u6642\u7cfb\u5217\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3002Oracle DB\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u304b\u3089\u53ce\u96c6\u3057\u305f\u30e1\u30c8\u30ea\u30c3\u30af\u3092\u6642\u7cfb\u5217\u5f62\u5f0f\u3067\u7ba1\u7406\u3057\u307e\u3059\u3002<\/p>\n<p>Grafana: \u5206\u6790\u304a\u3088\u3073\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306a\u8996\u899a\u5316\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3002\u30c7\u30fc\u30bf\u30fb\u30bd\u30fc\u30b9\u3068\u3057\u3066Prometheus\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<p>\u6587\u4ef6\u5728\u8fd9\u91cc\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d511437434c4406cc89f1\/6-0.png\" alt=\"image.png\" \/><\/div>\n<h1>\u73af\u5883\u4fe1\u606f<\/h1>\n<p>\u6784\u5efa\u76d1\u89c6\u6846\u67b6\u7684\u865a\u62df\u673a\u4fe1\u606f<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30b7\u30a7\u30a4\u30d7: VM.Standard.E4.Flex<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30a4\u30e1\u30fc\u30b8: Oracle Linux 8.8<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Docker: 24.0.7<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Docker Compose: 2.21.0<\/ul>\n<p>\u88ab\u76d1\u89c6\u7684Oracle\u6570\u636e\u5e93<\/p>\n<ul class=\"post-ul\">Oracle Database 23.3(OCI\u306eBaseDB)<\/ul>\n<h1>\u521b\u5efa\u76d1\u89c6\u7528\u6570\u636e\u5e93\u7528\u6237<\/h1>\n<p>\u8fd9\u6b21\u6211\u4eec\u5728OCI\u4e0a\u521b\u5efa\u4e86\u4e00\u4e2a23c(23.3)\u7684BaseDB\uff0c\u5e76\u5728\u5176\u4e0a\u9762\u521b\u5efa\u4e86\u4e00\u4e2a\u540d\u4e3apdb23c\u7684PDB\u3002\u6211\u4eec\u5c06\u5176\u4f5c\u4e3a\u76d1\u89c6\u5bf9\u8c61\u7684PDB\uff0c\u5e76\u5728\u5176\u4e2d\u521b\u5efa\u4e86\u4e00\u4e2a\u540d\u4e3amonitor\u7684\u6570\u636e\u5e93\u7528\u6237\u7528\u4e8e\u76d1\u89c6\u3002<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u4f7f\u7528SYS\u521b\u5efa\u7528\u6237<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u901a\u8fc7\u6388\u4e88SELECT_CATALOG_ROLE\u89d2\u8272\uff0c\u60a8\u53ef\u4ee5\u83b7\u5f97\u5728Prometheus\u4e2d\u6536\u96c6\u5ea6\u91cf\u7684\u76ee\u5f55\u7b49\u53c2\u8003\u6743\u9650\u3002<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>create user monitor identified by Welcome12345#;<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>grant connect, resource, DBA, SELECT_CATALOG_ROLE, unlimited tablespace to monitor;<\/ol>\n<\/li>\n<\/ol>\n<p>\u6388\u4e88TxEventQ\u76f8\u5173\u89d2\u8272<br \/>\ngrant execute on dbms_aq to monitor;<br \/>\ngrant execute on dbms_aqadm to monitor;<br \/>\ngrant execute on dbms_aqin to monitor;<br \/>\ngrant execute on dbms_aqjms_internal to monitor;<br \/>\ngrant execute on dbms_teqk to monitor;<br \/>\ngrant execute on DBMS_RESOURCE_MANAGER to monitor;<br \/>\ngrant select on sys.aq$_queue_shards to monitor;<br \/>\ngrant select on user_queue_partition_assignment_table to monitor;<\/p>\n<p>\u4ece\u865a\u62df\u673a\u4f7f\u7528SQL*Plus\u8fde\u63a5\u5230pdb23c\u8fdb\u884c\u76d1\u6d4b(\u7b80\u6613\u8fde\u63a5)<br \/>\nsqlplus monitor\/Welcome12345#@xxxx:1521\/pdb23c.xxxx.vcn1.oraclevcn.com<\/p>\n<p>SQL*Plus: Release 21.0.0.0.0 &#8211; Production on Tue Nov 14 06:26:35 2023<br \/>\nVersion 21.9.0.0.0<\/p>\n<p>Copyright (c) 1982, 2022, Oracle. All rights reserved.<\/p>\n<p>\u4e0a\u6b21\u6210\u529f\u767b\u5f55\u65f6\u95f4: Tue Nov 14 2023 06:26:23 +00:00<\/p>\n<p>\u5df2\u8fde\u63a5\u5230:<br \/>\nOracle Database 23c Enterprise Edition Release 23.0.0.0.0 &#8211; Production<br \/>\nVersion 23.3.0.23.09<\/p>\n<h1>Oracle\u6570\u636e\u5e93\u53ef\u89c2\u5bdf\u6027\u5bfc\u51fa\u5668\u7684\u8bbe\u7f6e\u3002<\/h1>\n<p>Oracle\u6570\u636e\u5e93\u53ef\u89c2\u6d4b\u6027\u5bfc\u51fa\u7a0b\u5e8f\u53ef\u4f7f\u7528\u53ef\u4eceOracle\u5bb9\u5668\u6ce8\u518c\u8868\u4e0b\u8f7d\u7684\u5bb9\u5668\u6620\u50cf\u5728\u672c\u5730\u5bb9\u5668\u4e2d\u4f7f\u7528\u3002\u4e0d\u9700\u8981\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1\u6216\u8bb8\u53ef\u8bc1\u660e\/\u6279\u51c6\u3002<\/p>\n<p>\u987a\u4fbf\u8bf4\u4e00\u4e0b\uff0c\u8fd9\u4e2aOracle\u5bb9\u5668\u6ce8\u518c\u8868\u4e2d\u8fd8\u5305\u542b\u4e86Autonomous Database\u7684\u514d\u8d39\u6620\u50cf\u4ee5\u53ca\u9002\u7528\u4e8e\u5fae\u670d\u52a1\u7684Oracle\u4ea4\u6613\u7ba1\u7406\u5668\uff08MicroTx\uff09\u7684\u6620\u50cf\u3002<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u521b\u5efa\u4f5c\u4e1a\u76ee\u5f55<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>mkdir -p monitoring\/exporter<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>cd monitoring\/exporter<\/ol>\n<\/li>\n<\/ol>\n<p>\u521b\u5efa\u81ea\u5b9a\u4e49\u6307\u6807\u914d\u7f6e\u6587\u4ef6txeventq-metrics.toml<br \/>\n\u8fd9\u6b21\u9664\u4e86\u9ed8\u8ba4\u7684\u6307\u6807\u4e4b\u5916\uff0c\u6211\u4eec\u8fd8\u60f3\u6536\u96c6TxEventQ\u7684\u6307\u6807\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u521b\u5efa\u4e00\u4e2atoml\u6587\u4ef6\uff0c\u5e76\u4f7f\u7528\u8be5\u6587\u4ef6\u6765\u521b\u5efaDocker\u955c\u50cf\u3002<\/p>\n<p>txeventq-metrics.toml<br \/>\n[[metric]]<br \/>\ncontext = &#8220;ownership&#8221;<br \/>\nmetricsdesc = { inst_id = &#8220;\u5f53\u524d\u961f\u5217\u7684\u6240\u6709\u8005\u5b9e\u4f8bID\u3002&#8221; }<br \/>\nrequest = &#8221;&#8217;<br \/>\nSELECT<br \/>\ninst_id<br \/>\nFROM<br \/>\ngv$persistent_queues<br \/>\nWHERE<br \/>\nROWNUM &lt; 2<br \/>\n&#8221;&#8217;<br \/>\n[[metric]]<br \/>\ncontext = &#8220;teq&#8221;<br \/>\nmetricsdesc = { curr_inst_id = &#8220;\u5f53\u524d\u5b9e\u4f8b\u7684ID&#8221; }<br \/>\nrequest = &#8220;SELECT instance_number AS curr_inst_id FROM v$instance&#8221;<\/p>\n<p>[[metric]]<br \/>\ncontext = &#8220;teq&#8221;<br \/>\nlabels = [&#8220;inst_id&#8221;]<br \/>\nmetricsdesc = { total_queues = &#8220;\u961f\u5217\u7684\u603b\u6570&#8221; }<br \/>\nrequest = &#8221;&#8217;<br \/>\nSELECT<br \/>\ninst_id,<br \/>\nCOUNT(*) AS total_queues<br \/>\nFROM<br \/>\n(<br \/>\nSELECT DISTINCT<br \/>\nt1.inst_id,<br \/>\nt2.queue_name<br \/>\nFROM<br \/>\ngv$aq_sharded_subscriber_stat t1<br \/>\nJOIN gv$persistent_queues t2 ON t1.queue_id = t2.queue_id<br \/>\n)<br \/>\nGROUP BY<br \/>\ninst_id<br \/>\n&#8221;&#8217;<\/p>\n<p>[[metric]]<br \/>\ncontext = &#8220;teq&#8221;<br \/>\nlabels = [&#8220;inst_id&#8221;]<br \/>\nmetricsdesc = { total_subscribers = &#8220;\u8ba2\u9605\u8005\u7684\u603b\u6570&#8221; }<br \/>\nrequest = &#8221;&#8217;<br \/>\nSELECT<br \/>\ninst_id,<br \/>\nCOUNT(*) AS total_subscribers<br \/>\nFROM<br \/>\n(<br \/>\nSELECT DISTINCT<br \/>\ninst_id,<br \/>\nsubscriber_id<br \/>\nFROM<br \/>\ngv$aq_sharded_subscriber_stat<br \/>\n)<br \/>\nGROUP BY<br \/>\ninst_id<br \/>\n&#8221;&#8217;<\/p>\n<p>[[metric]]<br \/>\ncontext = &#8220;teq&#8221;<br \/>\nlabels = [&#8220;inst_id&#8221;, &#8220;queue_name&#8221;, &#8220;subscriber_name&#8221;]<br \/>\nmetricsdesc = { enqueued_msgs = &#8220;\u5165\u961f\u6d88\u606f\u7684\u603b\u6570\u3002&#8221;, dequeued_msgs = &#8220;\u51fa\u961f\u6d88\u606f\u7684\u603b\u6570\u3002&#8221;, remained_msgs = &#8220;\u5269\u4f59\u6d88\u606f\u7684\u603b\u6570\u3002&#8221;, time_since_last_dequeue = &#8220;\u81ea\u4e0a\u6b21\u51fa\u961f\u4ee5\u6765\u7684\u65f6\u95f4\u3002&#8221;, estd_time_to_drain_no_enq = &#8220;\u5982\u679c\u6ca1\u6709\u5165\u961f\uff0c\u6392\u7a7a\u7684\u9884\u8ba1\u65f6\u95f4\u3002&#8221;, message_latency_1 = &#8220;\u8fc7\u53bb5\u5206\u949f\u7684\u6d88\u606f\u5ef6\u8fdf\u3002&#8221;, message_latency_2 = &#8220;\u8fc7\u53bb1\u5c0f\u65f6\u7684\u6d88\u606f\u5ef6\u8fdf\u3002&#8221;, message_latency_3 = &#8220;\u8fc7\u53bb5\u4e2a\u5c0f\u65f6\u7684\u6d88\u606f\u5ef6\u8fdf\u3002&#8221; }<br \/>\nrequest = &#8221;&#8217;<br \/>\nSELECT DISTINCT<br \/>\nt1.inst_id,<br \/>\nt1.queue_id,<br \/>\nt2.queue_name,<br \/>\nt1.subscriber_id AS subscriber_name,<br \/>\nt1.enqueued_msgs,<br \/>\nt1.dequeued_msgs,<br \/>\nt1.remained_msgs,<br \/>\nt1.time_since_last_dequeue,<br \/>\nt1.estd_time_to_drain_no_enq,<br \/>\nt1.message_latency_1,<br \/>\nt1.message_latency_2,<br \/>\nt1.message_latency_3<br \/>\nFROM<br \/>\n(<br \/>\nSELECT<br \/>\ninst_id,<br \/>\nqueue_id,<br \/>\nsubscriber_id,<br \/>\nSUM(enqueued_msgs) AS enqueued_msgs,<br \/>\nSUM(dequeued_msgs) AS dequeued_msgs,<br \/>\nSUM(enqueued_msgs &#8211; dequeued_msgs) AS remained_msgs,<br \/>\nMIN(time_since_last_dequeue) AS time_since_last_dequeue,<br \/>\nMAX(estd_time_to_drain_no_enq) AS estd_time_to_drain_no_enq,<br \/>\nAVG(10) AS message_latency_1,<br \/>\nAVG(20) AS message_latency_2,<br \/>\nAVG(30) AS message_latency_3<br \/>\nFROM<br \/>\ngv$aq_sharded_subscriber_stat<br \/>\nGROUP BY<br \/>\nqueue_id,<br \/>\nsubscriber_id,<br \/>\ninst_id<br \/>\n) t1<br \/>\nJOIN gv$persistent_queues t2 ON t1.queue_id = t2.queue_id<br \/>\n&#8221;&#8217;<\/p>\n<p>Dockerfile<br \/>\nFROM container-registry.oracle.com\/database\/observability-exporter:1.1.0<br \/>\nCOPY txeventq-metrics.toml \/<br \/>\nENTRYPOINT [&#8220;\/oracledb_exporter&#8221;, &#8220;&#8211;custom.metrics&#8221;, &#8220;\/txeventq-metrics.toml&#8221;]<\/p>\n<p>\u6784\u5efa<br \/>\ndocker build -t txeventq_exporter:1.0 .<\/p>\n<p>docker images<br \/>\nREPOSITORY TAG IMAGE ID CREATED SIZE<br \/>\ntxeventq_exporter 1.0 8169e80d23bb 12 minutes ago 709MB<\/p>\n<p>\u8fd0\u884c\u6d4b\u8bd5<br \/>\ndocker run -it &#8211;rm &#8211;name exporter -e DB_USERNAME=MONITOR -e DB_PASSWORD=Welcome12345# -e DB_CONNECT_STRING=xxxx:1521\/pdb23c.xxxx.vcn1.oraclevcn.com -p 9161:9161 txeventq_exporter:1.0<\/p>\n<p>\u5728\u672c\u5730(http:\/\/localhost:9161\/metrics)\u4e2d\u786e\u8ba4<br \/>\n# HELP oracledb_up Oracle\u6570\u636e\u5e93\u670d\u52a1\u5668\u662f\u5426\u8fd0\u884c\u3002<br \/>\n# TYPE oracledb_up gauge<br \/>\noracledb_up 1<\/p>\n<p>\u6709\u8bb8\u591a\u6307\u6807\u88ab\u8bb0\u5f55\u4e0b\u6765\uff0c\u4f46\u5176\u4e2d\u4e00\u4e2a\u6307\u6807oracledb_up\u7684\u503c\u4e3a1\uff0c\u8bf4\u660e\u5df2\u6210\u529f\u8fde\u63a5\u5230\u6570\u636e\u5e93\u670d\u52a1\u5668\u3002<\/p>\n<h1>\u666e\u7f57\u7c73\u4fee\u65af\u7684\u8bbe\u7f6e<\/h1>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u521b\u5efa\u4f5c\u4e1a\u7528\u76ee\u5f55<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>mkdir -p monitoring\/prometheus<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>cd monitoring\/prometheus<\/ol>\n<\/li>\n<\/ol>\n<p>\u521b\u5efaPrometheus\u7684\u914d\u7f6e\u6587\u4ef6prometheus.yaml<\/p>\n<p>prometheus.yaml<br \/>\nglobal:<br \/>\nscrape_interval: 15s<br \/>\nscrape_timeout: 10s<br \/>\nevaluation_interval: 15s<br \/>\nscrape_configs:<br \/>\n&#8211; job_name: prometheus<br \/>\nhonor_timestamps: true<br \/>\nscrape_interval: 15s<br \/>\nscrape_timeout: 10s<br \/>\nmetrics_path: \/metrics<br \/>\nstatic_configs:<br \/>\n&#8211; targets:<br \/>\n&#8211; localhost:9090<br \/>\n&#8211; job_name: oracle-exporter<br \/>\nscrape_interval: 15s<br \/>\nscrape_timeout: 10s<br \/>\nmetrics_path: \/metrics<br \/>\nstatic_configs:<br \/>\n&#8211; targets:<br \/>\n&#8211; exporter:9161<\/p>\n<p>\u62c9\u53d6Prometheus\u5b98\u65b9\u955c\u50cf<br \/>\ndocker pull prom\/prometheus:v2.47.2<\/p>\n<h1>Grafana\u7684\u8bbe\u7f6e<\/h1>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u521b\u5efa\u4f5c\u4e1a\u76ee\u5f55<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>mkdir monitoring\/grafana<\/ol>\n<\/li>\n<\/ol>\n<p>\u914d\u7f6edatasource.yaml<br \/>\nmkdir monitoring\/grafana\/datasources<\/p>\n<p>datasource.yaml<br \/>\napiVersion: 1<br \/>\ndatasources:<br \/>\n&#8211; name: Prometheus<br \/>\ntype: prometheus<br \/>\nurl: http:\/\/prometheus:9090<br \/>\nisDefault: true<br \/>\naccess: proxy<br \/>\neditable: true<\/p>\n<p>\u914d\u7f6edashboard<br \/>\n\u672c\u6b21\u5c06\u4f7f\u7528\u4e24\u4e2a\u9884\u5148\u521b\u5efa\u7684\u4eea\u8868\u677f\u8fdb\u884cDB\u5b9e\u4f8b\u548cTxEventQ\u7684\u76d1\u89c6\u3002\u5728dashboards\u76ee\u5f55\u4e0b\uff0c\u521b\u5efa\u4e24\u4e2ajson\u6587\u4ef6oracledb.json\u548ctxeventq.json\uff0c\u4ee5\u53ca\u4e00\u4e2a\u914d\u7f6e\u6587\u4ef6dashboard.yaml\u3002\u5176\u4e2d\uff0coracledb.json\u4f7f\u7528\u6b64\u5904\u7684\u6587\u4ef6\uff0ctxeventq.json\u4f7f\u7528\u6b64\u5904\u7684\u6587\u4ef6\u3002<br \/>\nmkdir monitoring\/grafana\/dashboards<\/p>\n<p>dashboard.yaml<br \/>\napiVersion: 1<br \/>\nproviders:<br \/>\n&#8211; name: &#8220;Dashboard provider&#8221;<br \/>\norgId: 1<br \/>\ntype: file<br \/>\ndisableDeletion: false<br \/>\nupdateIntervalSeconds: 10<br \/>\nallowUiUpdates: false<br \/>\noptions:<br \/>\npath: \/var\/lib\/grafana\/dashboards<br \/>\nfoldersFromFilesStructure: true<\/p>\n<p>\u62c9\u53d6Grafana\u5b98\u65b9\u955c\u50cf<br \/>\ndocker pull grafana\/grafana:10.2.1<\/p>\n<h1>docker compose\u7684\u914d\u7f6e<\/h1>\n<p>\u8fd9\u6b21\uff0c\u6211\u4eec\u4f7f\u7528\u4e86Docker Compose\u8fdb\u884c\u6267\u884c\u3002\u6211\u4eec\u5c06\u5728monitoring\u76ee\u5f55\u4e2d\u521b\u5efa\u4ee5\u4e0b\u7684docker-compose.yml\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">services<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">prometheus<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">prom\/prometheus:v2.47.2<\/span>\r\n    <span class=\"na\">container_name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">prometheus<\/span>\r\n    <span class=\"na\">command<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s1\">'<\/span><span class=\"s\">--config.file=\/etc\/prometheus\/prometheus.yaml'<\/span>\r\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">9090:9090<\/span>\r\n    <span class=\"na\">restart<\/span><span class=\"pi\">:<\/span> <span class=\"s\">unless-stopped<\/span>\r\n    <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/prometheus:\/etc\/prometheus<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">prom_data:\/prometheus<\/span>\r\n\r\n  <span class=\"na\">grafana<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">grafana\/grafana:10.2.1<\/span>\r\n    <span class=\"na\">container_name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">grafana<\/span>\r\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">3000:3000<\/span>\r\n    <span class=\"na\">restart<\/span><span class=\"pi\">:<\/span> <span class=\"s\">unless-stopped<\/span>\r\n    <span class=\"na\">environment<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">GF_SECURITY_ADMIN_USER=admin<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">GF_SECURITY_ADMIN_PASSWORD=grafana<\/span>\r\n    <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/grafana\/datasources:\/etc\/grafana\/provisioning\/datasources<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/grafana\/dashboards:\/var\/lib\/grafana\/dashboards<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/grafana\/datasources\/datasource.yaml:\/etc\/grafana\/provisioning\/datasources\/datasource.yaml<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/grafana\/dashboards\/dashboard.yaml:\/etc\/grafana\/provisioning\/dashboards\/main.yaml<\/span>\r\n\r\n\r\n  <span class=\"na\">exporter<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">txeventq_exporter:1.0<\/span>\r\n    <span class=\"na\">container_name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">exporter<\/span>\r\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">9161:9161<\/span>\r\n    <span class=\"na\">environment<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">DB_USERNAME=monitor<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">DB_PASSWORD=Welcome12345#<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">DB_CONNECT_STRING=xxxx.vcn1.oraclevcn.com:1521\/pdb23c.xxxx.vcn1.oraclevcn.com<\/span>\r\n    <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/exporter:\/exporter<\/span>\r\n\r\n<span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">prom_data<\/span><span class=\"pi\">:<\/span>\r\n<\/code><\/pre>\n<p>\u8bf7\u6839\u636e\u9700\u8981\u9002\u5f53\u4fee\u6539DB\u8fde\u63a5\u5b57\u7b26\u4e32DB_CONNECT_STRING\u3002<\/p>\n<p>\u6700\u7ec8\u7684\u76ee\u5f55\u7ed3\u6784\u5728\u8fd9\u91cc\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"o\">[<\/span>opc@devinsrd monitoring]<span class=\"nv\">$ <\/span>tree\r\n<span class=\"nb\">.<\/span>\r\n\u251c\u2500\u2500 docker-compose.yml\r\n\u251c\u2500\u2500 exporter\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 Dockerfile\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 txeventq-metrics.toml\r\n\u251c\u2500\u2500 grafana\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 dashboards\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 dashboard.yaml\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 oracledb.json\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 txeventq.json\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 datasources\r\n\u2502\u00a0\u00a0     \u2514\u2500\u2500 datasource.yaml\r\n\u2514\u2500\u2500 prometheus\r\n    \u2514\u2500\u2500 prometheus.yaml\r\n<\/code><\/pre>\n<p>\u8fd0\u884c Docker Compose\u3002<\/p>\n<pre class=\"post-pre\"><code>docker compose up <span class=\"nt\">-d<\/span>\r\n\r\n<span class=\"o\">[<\/span>+] Running 5\/5\r\n \u2714 Network monitoring_default     Created                                                0.2s\r\n \u2714 Volume <span class=\"s2\">\"monitoring_prom_data\"<\/span>  Created                                                0.0s\r\n \u2714 Container prometheus           Started                                                0.1s\r\n \u2714 Container grafana              Started                                                0.1s\r\n \u2714 Container exporter             Started                                                0.1s\r\n<\/code><\/pre>\n<p>\u5728\u672c\u5730(http:\/\/localhost:3000)\u8fdb\u884c\u786e\u8ba4\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d511437434c4406cc89f1\/32-0.png\" alt=\"image.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d511437434c4406cc89f1\/33-0.png\" alt=\"image.png\" \/><\/div>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30b9\u30c6\u30fc\u30bf\u30b9<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30bb\u30c3\u30b7\u30e7\u30f3\u6570(Background\u3001user)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u5b9f\u884c\u6570<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u5f85\u6a5f\u6642\u9593<\/ul>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d511437434c4406cc89f1\/35-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u6765\u76d1\u89c6TxEventQ\u3002\u7531\u4e8e\u8fd8\u6ca1\u6709\u521b\u5efa\u961f\u5217\uff0c\u6240\u4ee5\u6211\u4eec\u5728\u4e0b\u9762\u8fdb\u884c\u521b\u5efa\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">declare<\/span>\r\n    <span class=\"n\">subscriber<\/span> <span class=\"n\">sys<\/span><span class=\"p\">.<\/span><span class=\"n\">aq$_agent<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">begin<\/span>\r\n  <span class=\"c1\">-- \u30c8\u30d4\u30c3\u30af(\u30ad\u30e5\u30fc\u8868\u306e\u4f5c\u6210)<\/span>\r\n  <span class=\"n\">dbms_aqadm<\/span><span class=\"p\">.<\/span><span class=\"n\">create_transactional_event_queue<\/span><span class=\"p\">(<\/span>\r\n    <span class=\"n\">queue_name<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"o\">'<\/span><span class=\"s1\">my_topic<\/span><span class=\"o\">'<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"n\">multiple_consumers<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"k\">true<\/span>  <span class=\"c1\">-- pub\/sub\u30c8\u30d4\u30c3\u30af\u306e\u4f5c\u6210<\/span>\r\n  <span class=\"p\">);<\/span>\r\n\r\n  <span class=\"c1\">-- \u30c8\u30d4\u30c3\u30af\u306e\u958b\u59cb<\/span>\r\n  <span class=\"n\">dbms_aqadm<\/span><span class=\"p\">.<\/span><span class=\"n\">start_queue<\/span><span class=\"p\">(<\/span>\r\n    <span class=\"n\">queue_name<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"o\">'<\/span><span class=\"s1\">my_topic<\/span><span class=\"o\">'<\/span>\r\n  <span class=\"p\">);<\/span>\r\n\r\n  <span class=\"c1\">-- \u30b5\u30d6\u30b9\u30af\u30e9\u30a4\u30d0\u306e\u767b\u9332<\/span>\r\n  <span class=\"n\">dbms_aqadm<\/span><span class=\"p\">.<\/span><span class=\"n\">add_subscriber<\/span><span class=\"p\">(<\/span>\r\n    <span class=\"n\">queue_name<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"o\">'<\/span><span class=\"s1\">my_topic<\/span><span class=\"o\">'<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"n\">subscriber<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"n\">sys<\/span><span class=\"p\">.<\/span><span class=\"n\">aq$_agent<\/span><span class=\"p\">(<\/span>\r\n      <span class=\"o\">'<\/span><span class=\"s1\">my_subscriber<\/span><span class=\"o\">'<\/span><span class=\"p\">,<\/span>    <span class=\"c1\">-- \u30b5\u30d6\u30b9\u30af\u30e9\u30a4\u30d0\u540d<\/span>\r\n      <span class=\"kr\">null<\/span><span class=\"p\">,<\/span>               <span class=\"c1\">-- \u901a\u77e5\u306b\u4f7f\u7528\u3055\u308c\u308b\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9<\/span>\r\n      <span class=\"mi\">0<\/span>                   <span class=\"c1\">-- \u30d7\u30ed\u30c8\u30b3\u30eb<\/span>\r\n    <span class=\"p\">),<\/span>\r\n    <span class=\"k\">rule<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"o\">'<\/span><span class=\"s1\">correlation = <\/span><span class=\"se\">''<\/span><span class=\"s1\">my_subscriber<\/span><span class=\"se\">''<\/span><span class=\"o\">'<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"k\">end<\/span><span class=\"p\">;<\/span>\r\n<span class=\"o\">\/<\/span>\r\n<\/code><\/pre>\n<p>\u5982\u679c\u521b\u5efa\u5931\u8d25\uff0c\u8bf7\u68c0\u67e5\u6743\u9650\u3002\u6b64\u5916\uff0cdbms_aqadm.create_transactional_event_queue\u4ec5\u9002\u7528\u4e8eOracle Database 21c\u548c23c\u3002<\/p>\n<p>\u6211\u5df2\u7ecf\u521b\u5efa\u4e86\u4e00\u4e2a\u961f\u5217\u8868\uff0c\u63a5\u4e0b\u6765\u5c06\u5c1d\u8bd5\u5411\u961f\u5217\u8868\u53d1\u9001\u6d88\u606f\uff08\u5165\u961f\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">declare<\/span>\r\n    <span class=\"n\">enqueue_options<\/span>    <span class=\"n\">dbms_aq<\/span><span class=\"p\">.<\/span><span class=\"n\">enqueue_options_t<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">message_properties<\/span> <span class=\"n\">dbms_aq<\/span><span class=\"p\">.<\/span><span class=\"n\">message_properties_t<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">message_handle<\/span>     <span class=\"kt\">raw<\/span><span class=\"p\">(<\/span><span class=\"mi\">16<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"n\">message<\/span>            <span class=\"n\">SYS<\/span><span class=\"p\">.<\/span><span class=\"n\">AQ$_JMS_TEXT_MESSAGE<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">begin<\/span>\r\n    <span class=\"c1\">-- \u30e1\u30c3\u30bb\u30fc\u30b8\u30fb\u30da\u30a4\u30ed\u30fc\u30c9\u306e\u4f5c\u6210<\/span>\r\n    <span class=\"n\">message<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">SYS<\/span><span class=\"p\">.<\/span><span class=\"n\">AQ$_JMS_TEXT_MESSAGE<\/span><span class=\"p\">.<\/span><span class=\"n\">construct<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">message<\/span><span class=\"p\">.<\/span><span class=\"n\">set_text<\/span><span class=\"p\">(<\/span><span class=\"o\">'<\/span><span class=\"s1\">{\"orderid\": 12345, \"username\": \"Jessica Smith\"}<\/span><span class=\"o\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n    <span class=\"c1\">-- \u30b3\u30f3\u30b7\u30e5\u30fc\u30de\u540d\u306e\u767b\u9332<\/span>\r\n    <span class=\"n\">message_properties<\/span><span class=\"p\">.<\/span><span class=\"n\">correlation<\/span> <span class=\"o\">:=<\/span> <span class=\"o\">'<\/span><span class=\"s1\">my_subscriber<\/span><span class=\"o\">'<\/span><span class=\"p\">;<\/span>\r\n    \r\n    <span class=\"c1\">-- \u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u30a8\u30f3\u30ad\u30e5\u30fc<\/span>\r\n    <span class=\"n\">dbms_aq<\/span><span class=\"p\">.<\/span><span class=\"n\">enqueue<\/span><span class=\"p\">(<\/span>\r\n        <span class=\"n\">queue_name<\/span>           <span class=\"o\">=&gt;<\/span> <span class=\"o\">'<\/span><span class=\"s1\">my_topic<\/span><span class=\"o\">'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"n\">enqueue_options<\/span>      <span class=\"o\">=&gt;<\/span> <span class=\"n\">enqueue_options<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"n\">message_properties<\/span>   <span class=\"o\">=&gt;<\/span> <span class=\"n\">message_properties<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"n\">payload<\/span>              <span class=\"o\">=&gt;<\/span> <span class=\"n\">message<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"n\">msgid<\/span>                <span class=\"o\">=&gt;<\/span> <span class=\"n\">message_handle<\/span><span class=\"p\">);<\/span>\r\n\r\n    <span class=\"c1\">-- \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u306e\u30b3\u30df\u30c3\u30c8<\/span>\r\n    <span class=\"k\">commit<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">end<\/span><span class=\"p\">;<\/span>\r\n<span class=\"o\">\/<\/span>\r\n<\/code><\/pre>\n<p>\u56e0\u4e3a\u6211\u4eec\u5df2\u7ecf\u5b8c\u6210\u4e86Enqueue\uff0c\u6240\u4ee5\u6211\u4f1a\u5728Grafana\u4e0a\u8fdb\u884c\u786e\u8ba4\u3002\u6211\u4f1a\u67e5\u770b\u4eea\u8868\u677f\u4e0a\u7684TxEventQ Monitor\u3002<br \/>\n\u4f60\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u6307\u6807\u8fdb\u884c\u786e\u8ba4\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">TxEventQ\u306e\u30b9\u30c6\u30fc\u30bf\u30b9<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30ad\u30e5\u30fc\u8868(\u30c8\u30d4\u30c3\u30af)\u306e\u6570<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30b5\u30d6\u30b9\u30af\u30e9\u30a4\u30d0\u306e\u6570<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30a8\u30f3\u30ad\u30e5\u30fc\/\u30c7\u30ad\u30e5\u30fc\u7387(\u6027\u80fd\u6307\u6a19)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u30a8\u30f3\u30ad\u30e5\u30fc\/\u30c7\u30ad\u30e5\u30fc\u3055\u308c\u305f\u30e1\u30c3\u30bb\u30fc\u30b8\u6570<\/ul>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d511437434c4406cc89f1\/43-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u53e6\u5916\uff0c\u60a8\u8fd8\u53ef\u4ee5\u83b7\u53d6\u4ee5\u4e0b\u9488\u5bf9\u6bcf\u4e2a\u4e3b\u9898\u6216\u8ba2\u9605\u8005\u7684\u7279\u5b9a\u6307\u6807\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d511437434c4406cc89f1\/45-0.png\" alt=\"image.png\" \/><\/div>\n<h1>\u6700\u540e\u4e00\u53e5<\/h1>\n<p>\u672c\u6b21\u6211\u4eec\u5c1d\u8bd5\u4f7f\u7528Oracle Database Observability Exporter + Prometheus + Grafana\u6765\u76d1\u63a7Oracle Transactional Event Queues\u3002\u867d\u7136\u53ef\u4ee5\u4f7f\u7528Enterprise Manager\uff08EM\uff09\u6216\u4e91\u7aef\u7684Database Management\u7b49\u670d\u52a1\u6765\u76d1\u63a7Oracle Database\uff0c\u4f46\u5982\u679c\u8981\u5bf9\u7279\u5b9a\u961f\u5217\u8fdb\u884c\u6307\u6807\u76d1\u63a7\uff0c\u5219\u53ef\u4ee5\u7ed3\u5408\u8fd9\u4e9b\u5f00\u6e90\u5de5\u5177\u6765\u5b9e\u73b0\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 \u5728Oracle Database 23c(21c)\u4e2d\uff0c\u6709\u4e24\u4e2a\u514d\u8d39\u53ef\u7528\u7684\u529f\u80fd\uff0c\u4e00\u4e2a\u662f\u529f\u80fd\u5f3a\u5927\u7684\u6d88\u606f\u961f\u5217\u7cfb\u7edf [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-43169","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4f7f\u7528Prometheus + Grafana\u76d1\u63a7Oracle Transactional Event Queues - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528prometheus-grafana\u76d1\u63a7oracle-transactional-event-queues\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Prometheus + Grafana\u76d1\u63a7Oracle Transactional Event Queues\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 \u5728Oracle Database 23c(21c)\u4e2d\uff0c\u6709\u4e24\u4e2a\u514d\u8d39\u53ef\u7528\u7684\u529f\u80fd\uff0c\u4e00\u4e2a\u662f\u529f\u80fd\u5f3a\u5927\u7684\u6d88\u606f\u961f\u5217\u7cfb\u7edf [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528prometheus-grafana\u76d1\u63a7oracle-transactional-event-queues\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-23T08:06:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T20:09:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d511437434c4406cc89f1\/6-0.png\" \/>\n<meta name=\"author\" content=\"\u65b0, \u97f5\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u65b0, \u97f5\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8prometheus-grafana%e7%9b%91%e6%8e%a7oracle-transactional-event-queues\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8prometheus-grafana%e7%9b%91%e6%8e%a7oracle-transactional-event-queues\/\",\"name\":\"\u4f7f\u7528Prometheus + Grafana\u76d1\u63a7Oracle Transactional Event Queues - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-10-23T08:06:55+00:00\",\"dateModified\":\"2024-04-29T20:09:23+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8prometheus-grafana%e7%9b%91%e6%8e%a7oracle-transactional-event-queues\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8prometheus-grafana%e7%9b%91%e6%8e%a7oracle-transactional-event-queues\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8prometheus-grafana%e7%9b%91%e6%8e%a7oracle-transactional-event-queues\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Prometheus + Grafana\u76d1\u63a7Oracle Transactional Event Queues\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9\",\"name\":\"\u65b0, \u97f5\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g\",\"caption\":\"\u65b0, \u97f5\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunxin\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8prometheus-grafana%e7%9b%91%e6%8e%a7oracle-transactional-event-queues\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Prometheus + Grafana\u76d1\u63a7Oracle Transactional Event Queues - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528prometheus-grafana\u76d1\u63a7oracle-transactional-event-queues\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Prometheus + Grafana\u76d1\u63a7Oracle Transactional Event Queues","og_description":"\u9996\u5148 \u5728Oracle Database 23c(21c)\u4e2d\uff0c\u6709\u4e24\u4e2a\u514d\u8d39\u53ef\u7528\u7684\u529f\u80fd\uff0c\u4e00\u4e2a\u662f\u529f\u80fd\u5f3a\u5927\u7684\u6d88\u606f\u961f\u5217\u7cfb\u7edf [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528prometheus-grafana\u76d1\u63a7oracle-transactional-event-queues\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-10-23T08:06:55+00:00","article_modified_time":"2024-04-29T20:09:23+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d511437434c4406cc89f1\/6-0.png"}],"author":"\u65b0, \u97f5","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u65b0, \u97f5","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"6 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8prometheus-grafana%e7%9b%91%e6%8e%a7oracle-transactional-event-queues\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8prometheus-grafana%e7%9b%91%e6%8e%a7oracle-transactional-event-queues\/","name":"\u4f7f\u7528Prometheus + Grafana\u76d1\u63a7Oracle Transactional Event Queues - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-10-23T08:06:55+00:00","dateModified":"2024-04-29T20:09:23+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8prometheus-grafana%e7%9b%91%e6%8e%a7oracle-transactional-event-queues\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8prometheus-grafana%e7%9b%91%e6%8e%a7oracle-transactional-event-queues\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8prometheus-grafana%e7%9b%91%e6%8e%a7oracle-transactional-event-queues\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Prometheus + Grafana\u76d1\u63a7Oracle Transactional Event Queues"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9","name":"\u65b0, \u97f5","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g","caption":"\u65b0, \u97f5"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunxin\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8prometheus-grafana%e7%9b%91%e6%8e%a7oracle-transactional-event-queues\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/43169","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=43169"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/43169\/revisions"}],"predecessor-version":[{"id":89591,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/43169\/revisions\/89591"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=43169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=43169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=43169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}