ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใƒขใƒ‹ใ‚ฟใƒชใƒณใ‚ฐใฏใ€ใ‚ฏใ‚จใƒชใ‚ตใƒณใƒ—ใƒซใ‚’ๅ…ฌ้–‹ใ™ใ‚‹ใ“ใจใงใ€Oracle ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใ‚’ๆทฑใๅฏ่ฆ–ๅŒ–ใ—ใ€ใ•ใพใ–ใพใชใƒฏใƒผใ‚ฏใƒญใƒผใƒ‰ใ‚’ใƒ—ใƒญใƒ•ใ‚กใ‚คใƒชใƒณใ‚ฐใ—ใฆๅ•้กŒใ‚’่จบๆ–ญใ—ใพใ™ใ€‚

Agent ใฏ่ชญใฟๅ–ใ‚Šๅฐ‚็”จใƒฆใƒผใ‚ถใƒผใจใ—ใฆใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใซใƒญใ‚ฐใ‚คใƒณใ—ใ€็›ดๆŽฅใƒ†ใƒฌใƒกใƒˆใƒชใƒผใ‚’ๅŽ้›†ใ—ใพใ™ใ€‚

ใฏใ˜ใ‚ใซ

ใ‚ตใƒใƒผใƒˆๅฏพ่ฑกใฎ Oracle ใƒใƒผใ‚ธใƒงใƒณ
11gใ€12cใ€18cใ€19cใ€21c
ใ‚ตใƒใƒผใƒˆๅฏพ่ฑกใฎ Agent ใƒใƒผใ‚ธใƒงใƒณ
7.53.0+
ใƒ‘ใƒ•ใ‚ฉใƒผใƒžใƒณใ‚นใธใฎๅฝฑ้Ÿฟ
Database Monitoring ใฎใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎ Agent ๆง‹ๆˆใฏไฟๅฎˆ็š„ใงใ™ใŒใ€ๅŽ้›†้–“้š”ใ‚„ใ‚ฏใ‚จใƒชใฎใ‚ตใƒณใƒ—ใƒชใƒณใ‚ฐใƒฌใƒผใƒˆใชใฉใฎ่จญๅฎšใ‚’่ชฟๆ•ดใ™ใ‚‹ใ“ใจใงใ€ใ‚ˆใ‚Šใƒ‹ใƒผใ‚บใซๅˆใฃใŸใ‚‚ใฎใซใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ใปใจใ‚“ใฉใฎใƒฏใƒผใ‚ฏใƒญใƒผใƒ‰ใซใŠใ„ใฆใ€Agent ใŒใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นไธŠใฎใ‚ฏใ‚จใƒชๅฎŸ่กŒๆ™‚้–“ใซไธŽใˆใ‚‹ๅฝฑ้Ÿฟใฏ 1% ๆœชๆบ€ใ€CPU ไฝฟ็”จ็އใ‚‚ 1% ๆœชๆบ€ใงใ™ใ€‚

Database Monitoring ใฏใ€ใƒ™ใƒผใ‚น Agent ไธŠใฎใ‚คใƒณใƒ†ใ‚ฐใƒฌใƒผใ‚ทใƒงใƒณใจใ—ใฆๅ‹•ไฝœใ—ใพใ™ (ใƒ™ใƒณใƒใƒžใƒผใ‚ฏใ‚’ๅ‚็…ง)ใ€‚
ใƒ—ใƒญใ‚ญใ‚ทใ€ใƒญใƒผใƒ‰ใƒใƒฉใƒณใ‚ตใƒผใ€ใ‚ณใƒใ‚ฏใ‚ทใƒงใƒณใƒ—ใƒผใƒฉใƒผ
Agent ใฏใ€็›ฃ่ฆ–ๅฏพ่ฑกใฎใƒ›ใ‚นใƒˆใซ็›ดๆŽฅๆŽฅ็ถšใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚Agent ใ‚’ใƒ—ใƒญใ‚ญใ‚ทใ€ใƒญใƒผใƒ‰ใƒใƒฉใƒณใ‚ตใƒผใ€ใ‚ณใƒใ‚ฏใ‚ทใƒงใƒณใƒ—ใƒผใƒฉใƒผใ‚’็ตŒ็”ฑใ—ใฆใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใซๆŽฅ็ถšใ—ใชใ„ใ‚ˆใ†ใ”ๆณจๆ„ใใ ใ•ใ„ใ€‚ใพใŸใ€ๅ„ Agent ใฏๅŸบ็คŽใจใชใ‚‹ใƒ›ใ‚นใƒˆๅใ‚’ๆŠŠๆกใ—ใ€ใƒ•ใ‚งใ‚คใƒซใ‚ชใƒผใƒใƒผใฎๅ ดๅˆใงใ‚‚ๅธธใซ 1 ใคใฎใƒ›ใ‚นใƒˆใฎใฟใ‚’ไฝฟ็”จใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚Datadog Agent ใŒๅฎŸ่กŒไธญใซ็•ฐใชใ‚‹ใƒ›ใ‚นใƒˆใซๆŽฅ็ถšใ™ใ‚‹ใจใ€ใƒกใƒˆใƒชใ‚ฏใ‚นๅ€คใฎๆญฃ็ขบๆ€งใŒๅคฑใ‚ใ‚Œใพใ™ใ€‚
ใƒ‡ใƒผใ‚ฟใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃใธใฎ้…ๆ…ฎ
Agent ใŒใŠๅฎขๆง˜ใฎใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใ‹ใ‚‰ใฉใฎใ‚ˆใ†ใชใƒ‡ใƒผใ‚ฟใ‚’ๅŽ้›†ใ™ใ‚‹ใ‹ใ€ใพใŸใใฎใƒ‡ใƒผใ‚ฟใฎๅฎ‰ๅ…จๆ€งใ‚’ใฉใฎใ‚ˆใ†ใซ็ขบไฟใ—ใฆใ„ใ‚‹ใ‹ใซใคใ„ใฆใฏใ€ๆฉŸๅฏ†ๆƒ…ๅ ฑใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚

ใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—

Oracle ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใง Database Monitoring ใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ใซใฏใ€ๆฌกใฎๆ‰‹้ †ใ‚’ๅฎŒไบ†ใ—ใฆใใ ใ•ใ„ใ€‚

  1. Datadog ใƒฆใƒผใ‚ถใƒผใฎไฝœๆˆ
  2. ใƒฆใƒผใ‚ถใƒผใซใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใธใฎใ‚ขใ‚ฏใ‚ปใ‚นๆจฉใ‚’ไป˜ไธŽใ™ใ‚‹
  3. ใƒ“ใƒฅใƒผใฎไฝœๆˆ
  4. Agent ใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ™ใ‚‹
  5. Agent ใฎๆง‹ๆˆ
  6. Oracle ใ‚คใƒณใƒ†ใ‚ฐใƒฌใƒผใ‚ทใƒงใƒณใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใพใŸใฏๆคœ่จผใ™ใ‚‹
  7. ใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—ใฎๆคœ่จผ

Datadog ใƒฆใƒผใ‚ถใƒผใฎไฝœๆˆ

ใƒฌใ‚ฌใ‚ทใƒผ Oracle ใ‚คใƒณใƒ†ใ‚ฐใƒฌใƒผใ‚ทใƒงใƒณใŒใ™ใงใซใ‚คใƒณใ‚นใƒˆใƒผใƒซใ•ใ‚Œใฆใ„ใ‚‹ๅ ดๅˆใฏใ€ใƒฆใƒผใ‚ถใƒผใŒใ™ใงใซๅญ˜ๅœจใ™ใ‚‹ใŸใ‚ใ€ใ“ใฎๆ‰‹้ †ใ‚’ใ‚นใ‚ญใƒƒใƒ—ใ—ใพใ™ใ€‚

ใ‚ตใƒผใƒใƒผใซๆŽฅ็ถšใ™ใ‚‹ใŸใ‚ใฎ่ชญใฟๅ–ใ‚Šๅฐ‚็”จใƒญใ‚ฐใ‚คใƒณใ‚’ไฝœๆˆใ—ใ€ๅฟ…่ฆใชๆจฉ้™ใ‚’ไป˜ไธŽใ—ใพใ™ใ€‚

CREATE USER c##datadog IDENTIFIED BY &password CONTAINER = ALL ;

ALTER USER c##datadog SET CONTAINER_DATA=ALL CONTAINER=CURRENT;
CREATE USER datadog IDENTIFIED BY &password ;
CREATE USER datadog IDENTIFIED BY &password ;

ใƒฆใƒผใ‚ถใƒผใซใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใธใฎใ‚ขใ‚ฏใ‚ปใ‚นๆจฉใ‚’ไป˜ไธŽใ™ใ‚‹

sysdba ใจใ—ใฆใƒญใ‚ฐใ‚ชใƒณใ—ใ€ไปฅไธ‹ใฎๆจฉ้™ใ‚’ไป˜ไธŽใ—ใพใ™ใ€‚

grant create session to c##datadog ;
grant select on v_$session to c##datadog ;
grant select on v_$database to c##datadog ;
grant select on v_$containers to c##datadog;
grant select on v_$sqlstats to c##datadog ;
grant select on v_$instance to c##datadog ;
grant select on dba_feature_usage_statistics to c##datadog ;
grant select on V_$SQL_PLAN_STATISTICS_ALL to c##datadog ;
grant select on V_$PROCESS to c##datadog ;
grant select on V_$SESSION to c##datadog ;
grant select on V_$CON_SYSMETRIC to c##datadog ;
grant select on CDB_TABLESPACE_USAGE_METRICS to c##datadog ;
grant select on CDB_TABLESPACES to c##datadog ;
grant select on V_$SQLCOMMAND to c##datadog ;
grant select on V_$DATAFILE to c##datadog ;
grant select on V_$SYSMETRIC to c##datadog ;
grant select on V_$SGAINFO to c##datadog ;
grant select on V_$PDBS to c##datadog ;
grant select on CDB_SERVICES to c##datadog ;
grant select on V_$OSSTAT to c##datadog ;
grant select on V_$PARAMETER to c##datadog ;
grant select on V_$SQLSTATS to c##datadog ;
grant select on V_$CONTAINERS to c##datadog ;
grant select on V_$SQL_PLAN_STATISTICS_ALL to c##datadog ;
grant select on V_$SQL to c##datadog ;
grant select on V_$PGASTAT to c##datadog ;
grant select on v_$asm_diskgroup to c##datadog ;
grant select on v_$rsrcmgrmetric to c##datadog ;
grant select on v_$dataguard_config to c##datadog ;
grant select on v_$dataguard_stats to c##datadog ;
grant select on v_$transaction to c##datadog;
grant select on v_$locked_object to c##datadog;
grant select on dba_objects to c##datadog;
grant select on cdb_data_files to c##datadog;
grant select on dba_data_files to c##datadog;

ใƒ—ใƒฉใ‚ฌใƒ–ใƒซใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚น (PDB) ไธŠใงๅฎŸ่กŒใ™ใ‚‹ใ‚ซใ‚นใ‚ฟใƒ ใ‚ฏใ‚จใƒชใ‚’ๆง‹ๆˆใ—ใŸๅ ดๅˆใฏใ€C##DATADOG ใƒฆใƒผใ‚ถใƒผใซ set container ๆจฉ้™ใ‚’ไป˜ไธŽใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚

connect / as sysdba
alter session set container = your_pdb ;
grant set container to c##datadog ;
grant create session to datadog ;
grant select on v_$session to datadog ;
grant select on v_$database to datadog ;
grant select on v_$containers to datadog;
grant select on v_$sqlstats to datadog ;
grant select on v_$instance to datadog ;
grant select on dba_feature_usage_statistics to datadog ;
grant select on V_$SQL_PLAN_STATISTICS_ALL to datadog ;
grant select on V_$PROCESS to datadog ;
grant select on V_$SESSION to datadog ;
grant select on V_$CON_SYSMETRIC to datadog ;
grant select on CDB_TABLESPACE_USAGE_METRICS to datadog ;
grant select on CDB_TABLESPACES to datadog ;
grant select on V_$SQLCOMMAND to datadog ;
grant select on V_$DATAFILE to datadog ;
grant select on V_$SYSMETRIC to datadog ;
grant select on V_$SGAINFO to datadog ;
grant select on V_$PDBS to datadog ;
grant select on CDB_SERVICES to datadog ;
grant select on V_$OSSTAT to datadog ;
grant select on V_$PARAMETER to datadog ;
grant select on V_$SQLSTATS to datadog ;
grant select on V_$CONTAINERS to datadog ;
grant select on V_$SQL_PLAN_STATISTICS_ALL to datadog ;
grant select on V_$SQL to datadog ;
grant select on V_$PGASTAT to datadog ;
grant select on v_$asm_diskgroup to datadog ;
grant select on v_$rsrcmgrmetric to datadog ;
grant select on v_$dataguard_config to datadog ;
grant select on v_$dataguard_stats to datadog ;
grant select on v_$transaction to datadog;
grant select on v_$locked_object to datadog;
grant select on dba_objects to datadog;
grant select on cdb_data_files to datadog;
grant select on dba_data_files to datadog;
grant create session to datadog ;
grant select on v_$session to datadog ;
grant select on v_$database to datadog ;
grant select on v_$sqlstats to datadog ;
grant select on v_$instance to datadog ;
grant select on dba_feature_usage_statistics to datadog ;
grant select on V_$SQL_PLAN_STATISTICS_ALL to datadog ;
grant select on V_$PROCESS to datadog ;
grant select on V_$SESSION to datadog ;
grant select on V_$SQLCOMMAND to datadog ;
grant select on V_$DATAFILE to datadog ;
grant select on V_$SYSMETRIC to datadog ;
grant select on V_$SGAINFO to datadog ;
grant select on V_$OSSTAT to datadog ;
grant select on V_$PARAMETER to datadog ;
grant select on V_$SQLSTATS to datadog ;
grant select on V_$SQL_PLAN_STATISTICS_ALL to datadog ;
grant select on V_$SQL to datadog ;
grant select on V_$PGASTAT to datadog ;
grant select on dba_tablespace_usage_metrics to datadog ;
grant select on dba_tablespaces to datadog ;
grant select on v_$asm_diskgroup to datadog ;
grant select on v_$rsrcmgrmetric to datadog ;
grant select on v_$dataguard_config to datadog ;
grant select on v_$dataguard_stats to datadog ;

ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅฎ‰ๅ…จใซไฟ็ฎก

Store your password using secret management software such as Vault. You can then reference this password as ENC[<SECRET_NAME>] in your Agent configuration files: for example, ENC[datadog_user_database_password]. See Secrets Management for more information.

The examples on this page use datadog_user_database_password to refer to the name of the secret where your password is stored. It is possible to reference your password in plain text, but this is not recommended.

ใƒ“ใƒฅใƒผใฎไฝœๆˆ

sysdba ใจใ—ใฆใƒญใ‚ฐใ‚ชใƒณใ—ใ€sysdba ใ‚นใ‚ญใƒผใƒžใซๆ–ฐใ—ใ„ view ใ‚’ไฝœๆˆใ—ใ€Agent ใƒฆใƒผใ‚ถใƒผใซใ‚ขใ‚ฏใ‚ปใ‚นๆจฉใ‚’ไธŽใˆใพใ™ใ€‚

CREATE OR REPLACE VIEW dd_session AS
SELECT /*+ push_pred(sq) push_pred(sq_prev) */
  s.indx as sid,
  s.ksuseser as serial#,
  s.ksuudlna as username,
  DECODE(BITAND(s.ksuseidl, 9), 1, 'ACTIVE', 0, DECODE(BITAND(s.ksuseflg, 4096), 0, 'INACTIVE', 'CACHED'), 'KILLED') as status,
  s.ksuseunm as osuser,
  s.ksusepid as process,
  s.ksusemnm as machine,
  s.ksusemnp as port,
  s.ksusepnm as program,
  DECODE(BITAND(s.ksuseflg, 19), 17, 'BACKGROUND', 1, 'USER', 2, 'RECURSIVE', '?') as type,
  s.ksusesqi as sql_id,
  sq.force_matching_signature as force_matching_signature,
  s.ksusesph as sql_plan_hash_value,
  s.ksusesesta as sql_exec_start,
  s.ksusesql as sql_address,
  CASE WHEN BITAND(s.ksusstmbv, POWER(2, 04)) = POWER(2, 04) THEN 'Y' ELSE 'N' END as in_parse,
  CASE WHEN BITAND(s.ksusstmbv, POWER(2, 07)) = POWER(2, 07) THEN 'Y' ELSE 'N' END as in_hard_parse,
  s.ksusepsi as prev_sql_id,
  s.ksusepha as prev_sql_plan_hash_value,
  s.ksusepesta as prev_sql_exec_start,
  sq_prev.force_matching_signature as prev_force_matching_signature,
  s.ksusepsq as prev_sql_address,
  s.ksuseapp as module,
    s.ksuseact as action,
    s.ksusecli as client_info,
    s.ksuseltm as logon_time,
    s.ksuseclid as client_identifier,
    s.ksusstmbv as op_flags,
    decode(s.ksuseblocker,
        4294967295, 'UNKNOWN', 4294967294, 'UNKNOWN', 4294967293, 'UNKNOWN', 4294967292, 'NO HOLDER', 4294967291, 'NOT IN WAIT',
        'VALID'
    ) as blocking_session_status,
    DECODE(s.ksuseblocker,
        4294967295, TO_NUMBER(NULL), 4294967294, TO_NUMBER(NULL), 4294967293, TO_NUMBER(NULL),
        4294967292, TO_NUMBER(NULL), 4294967291, TO_NUMBER(NULL), BITAND(s.ksuseblocker, 2147418112) / 65536
    ) as blocking_instance,
    DECODE(s.ksuseblocker,
        4294967295, TO_NUMBER(NULL), 4294967294, TO_NUMBER(NULL), 4294967293, TO_NUMBER(NULL),
        4294967292, TO_NUMBER(NULL), 4294967291, TO_NUMBER(NULL), BITAND(s.ksuseblocker, 65535)
    ) as blocking_session,
    DECODE(s.ksusefblocker,
        4294967295, 'UNKNOWN', 4294967294, 'UNKNOWN', 4294967293, 'UNKNOWN', 4294967292, 'NO HOLDER', 4294967291, 'NOT IN WAIT', 'VALID'
    ) as final_blocking_session_status,
    DECODE(s.ksusefblocker,
        4294967295, TO_NUMBER(NULL), 4294967294, TO_NUMBER(NULL), 4294967293, TO_NUMBER(NULL), 4294967292, TO_NUMBER(NULL),
        4294967291, TO_NUMBER(NULL), BITAND(s.ksusefblocker, 2147418112) / 65536
    ) as final_blocking_instance,
    DECODE(s.ksusefblocker,
        4294967295, TO_NUMBER(NULL), 4294967294, TO_NUMBER(NULL), 4294967293, TO_NUMBER(NULL), 4294967292, TO_NUMBER(NULL),
        4294967291, TO_NUMBER(NULL), BITAND(s.ksusefblocker, 65535)
    ) as final_blocking_session,
    DECODE(w.kslwtinwait,
        1, 'WAITING', decode(bitand(w.kslwtflags, 256), 0, 'WAITED UNKNOWN TIME',
        decode(round(w.kslwtstime / 10000), 0, 'WAITED SHORT TIME', 'WAITED KNOWN TIME'))
    ) as STATE,
    e.kslednam as event,
    e.ksledclass as wait_class,
    w.kslwtstime as wait_time_micro,
    c.name as pdb_name,
    sq.sql_text as sql_text,
    sq.sql_fulltext as sql_fulltext,
    sq_prev.sql_fulltext as prev_sql_fulltext,
    comm.command_name
FROM
  x$ksuse s,
  x$kslwt w,
  x$ksled e,
  v$sql sq,
  v$sql sq_prev,
  v$containers c,
  v$sqlcommand comm
WHERE
  BITAND(s.ksspaflg, 1) != 0
  AND BITAND(s.ksuseflg, 1) != 0
  AND s.inst_id = USERENV('Instance')
  AND s.indx = w.kslwtsid
  AND w.kslwtevt = e.indx
  AND s.ksusesqi = sq.sql_id(+)
  AND decode(s.ksusesch, 65535, TO_NUMBER(NULL), s.ksusesch) = sq.child_number(+)
  AND s.ksusepsi = sq_prev.sql_id(+)
  AND decode(s.ksusepch, 65535, TO_NUMBER(NULL), s.ksusepch) = sq_prev.child_number(+)
  AND s.con_id = c.con_id(+)
  AND s.ksuudoct = comm.command_type(+)
;

GRANT SELECT ON dd_session TO c##datadog ;
CREATE OR REPLACE VIEW dd_session AS
SELECT /*+ push_pred(sq) push_pred(sq_prev) */
  s.indx as sid,
  s.ksuseser as serial#,
  s.ksuudlna as username,
  DECODE(BITAND(s.ksuseidl, 9), 1, 'ACTIVE', 0, DECODE(BITAND(s.ksuseflg, 4096), 0, 'INACTIVE', 'CACHED'), 'KILLED') as status,
  s.ksuseunm as osuser,
  s.ksusepid as process,
  s.ksusemnm as machine,
  s.ksusemnp as port,
  s.ksusepnm as program,
  DECODE(BITAND(s.ksuseflg, 19), 17, 'BACKGROUND', 1, 'USER', 2, 'RECURSIVE', '?') as type,
  s.ksusesqi as sql_id,
  sq.force_matching_signature as force_matching_signature,
  s.ksusesph as sql_plan_hash_value,
  s.ksusesesta as sql_exec_start,
  s.ksusesql as sql_address,
  CASE WHEN BITAND(s.ksusstmbv, POWER(2, 04)) = POWER(2, 04) THEN 'Y' ELSE 'N' END as in_parse,
  CASE WHEN BITAND(s.ksusstmbv, POWER(2, 07)) = POWER(2, 07) THEN 'Y' ELSE 'N' END as in_hard_parse,
  s.ksusepsi as prev_sql_id,
  s.ksusepha as prev_sql_plan_hash_value,
  s.ksusepesta as prev_sql_exec_start,
  sq_prev.force_matching_signature as prev_force_matching_signature,
  s.ksusepsq as prev_sql_address,
  s.ksuseapp as module,
    s.ksuseact as action,
    s.ksusecli as client_info,
    s.ksuseltm as logon_time,
    s.ksuseclid as client_identifier,
    s.ksusstmbv as op_flags,
    decode(s.ksuseblocker,
        4294967295, 'UNKNOWN', 4294967294, 'UNKNOWN', 4294967293, 'UNKNOWN', 4294967292, 'NO HOLDER', 4294967291, 'NOT IN WAIT',
        'VALID'
    ) as blocking_session_status,
    DECODE(s.ksuseblocker,
        4294967295, TO_NUMBER(NULL), 4294967294, TO_NUMBER(NULL), 4294967293, TO_NUMBER(NULL),
        4294967292, TO_NUMBER(NULL), 4294967291, TO_NUMBER(NULL), BITAND(s.ksuseblocker, 2147418112) / 65536
    ) as blocking_instance,
    DECODE(s.ksuseblocker,
        4294967295, TO_NUMBER(NULL), 4294967294, TO_NUMBER(NULL), 4294967293, TO_NUMBER(NULL),
        4294967292, TO_NUMBER(NULL), 4294967291, TO_NUMBER(NULL), BITAND(s.ksuseblocker, 65535)
    ) as blocking_session,
    DECODE(s.ksusefblocker,
        4294967295, 'UNKNOWN', 4294967294, 'UNKNOWN', 4294967293, 'UNKNOWN', 4294967292, 'NO HOLDER', 4294967291, 'NOT IN WAIT', 'VALID'
    ) as final_blocking_session_status,
    DECODE(s.ksusefblocker,
        4294967295, TO_NUMBER(NULL), 4294967294, TO_NUMBER(NULL), 4294967293, TO_NUMBER(NULL), 4294967292, TO_NUMBER(NULL),
        4294967291, TO_NUMBER(NULL), BITAND(s.ksusefblocker, 2147418112) / 65536
    ) as final_blocking_instance,
    DECODE(s.ksusefblocker,
        4294967295, TO_NUMBER(NULL), 4294967294, TO_NUMBER(NULL), 4294967293, TO_NUMBER(NULL), 4294967292, TO_NUMBER(NULL),
        4294967291, TO_NUMBER(NULL), BITAND(s.ksusefblocker, 65535)
    ) as final_blocking_session,
    DECODE(w.kslwtinwait,
        1, 'WAITING', decode(bitand(w.kslwtflags, 256), 0, 'WAITED UNKNOWN TIME',
        decode(round(w.kslwtstime / 10000), 0, 'WAITED SHORT TIME', 'WAITED KNOWN TIME'))
    ) as STATE,
    e.kslednam as event,
    e.ksledclass as wait_class,
    w.kslwtstime as wait_time_micro,
    c.name as pdb_name,
    sq.sql_text as sql_text,
    sq.sql_fulltext as sql_fulltext,
    sq_prev.sql_fulltext as prev_sql_fulltext,
    comm.command_name
FROM
  x$ksuse s,
  x$kslwt w,
  x$ksled e,
  v$sql sq,
  v$sql sq_prev,
  v$containers c,
  v$sqlcommand comm
WHERE
  BITAND(s.ksspaflg, 1) != 0
  AND BITAND(s.ksuseflg, 1) != 0
  AND s.inst_id = USERENV('Instance')
  AND s.indx = w.kslwtsid
  AND w.kslwtevt = e.indx
  AND s.ksusesqi = sq.sql_id(+)
  AND decode(s.ksusesch, 65535, TO_NUMBER(NULL), s.ksusesch) = sq.child_number(+)
  AND s.ksusepsi = sq_prev.sql_id(+)
  AND decode(s.ksusepch, 65535, TO_NUMBER(NULL), s.ksusepch) = sq_prev.child_number(+)
  AND s.con_id = c.con_id(+)
  AND s.ksuudoct = comm.command_type(+)
;

GRANT SELECT ON dd_session TO datadog ;
CREATE OR REPLACE VIEW dd_session AS
SELECT /*+ push_pred(sq) push_pred(sq_prev) */
  s.indx as sid,
  s.ksuseser as serial#,
  s.ksuudlna as username,
  DECODE(BITAND(s.ksuseidl, 9), 1, 'ACTIVE', 0, DECODE(BITAND(s.ksuseflg, 4096), 0, 'INACTIVE', 'CACHED'), 'KILLED') as status,
  s.ksuseunm as osuser,
  s.ksusepid as process,
  s.ksusemnm as machine,
  s.ksusemnp as port,
  s.ksusepnm as program,
  DECODE(BITAND(s.ksuseflg, 19), 17, 'BACKGROUND', 1, 'USER', 2, 'RECURSIVE', '?') as type,
  s.ksusesqi as sql_id,
  sq.force_matching_signature as force_matching_signature,
  s.ksusesph as sql_plan_hash_value,
  s.ksusesesta as sql_exec_start,
  s.ksusesql as sql_address,
  CASE WHEN BITAND(s.ksusstmbv, POWER(2, 04)) = POWER(2, 04) THEN 'Y' ELSE 'N' END as in_parse,
  CASE WHEN BITAND(s.ksusstmbv, POWER(2, 07)) = POWER(2, 07) THEN 'Y' ELSE 'N' END as in_hard_parse,
  s.ksusepsi as prev_sql_id,
  s.ksusepha as prev_sql_plan_hash_value,
  s.ksusepesta as prev_sql_exec_start,
  sq_prev.force_matching_signature as prev_force_matching_signature,
  s.ksusepsq as prev_sql_address,
  s.ksuseapp as module,
    s.ksuseact as action,
    s.ksusecli as client_info,
    s.ksuseltm as logon_time,
    s.ksuseclid as client_identifier,
    s.ksusstmbv as op_flags,
    decode(s.ksuseblocker,
        4294967295, 'UNKNOWN', 4294967294, 'UNKNOWN', 4294967293, 'UNKNOWN', 4294967292, 'NO HOLDER', 4294967291, 'NOT IN WAIT',
        'VALID'
    ) as blocking_session_status,
    DECODE(s.ksuseblocker,
        4294967295, TO_NUMBER(NULL), 4294967294, TO_NUMBER(NULL), 4294967293, TO_NUMBER(NULL),
        4294967292, TO_NUMBER(NULL), 4294967291, TO_NUMBER(NULL), BITAND(s.ksuseblocker, 2147418112) / 65536
    ) as blocking_instance,
    DECODE(s.ksuseblocker,
        4294967295, TO_NUMBER(NULL), 4294967294, TO_NUMBER(NULL), 4294967293, TO_NUMBER(NULL),
        4294967292, TO_NUMBER(NULL), 4294967291, TO_NUMBER(NULL), BITAND(s.ksuseblocker, 65535)
    ) as blocking_session,
    DECODE(s.ksusefblocker,
        4294967295, 'UNKNOWN', 4294967294, 'UNKNOWN', 4294967293, 'UNKNOWN', 4294967292, 'NO HOLDER', 4294967291, 'NOT IN WAIT', 'VALID'
    ) as final_blocking_session_status,
    DECODE(s.ksusefblocker,
        4294967295, TO_NUMBER(NULL), 4294967294, TO_NUMBER(NULL), 4294967293, TO_NUMBER(NULL), 4294967292, TO_NUMBER(NULL),
        4294967291, TO_NUMBER(NULL), BITAND(s.ksusefblocker, 2147418112) / 65536
    ) as final_blocking_instance,
    DECODE(s.ksusefblocker,
        4294967295, TO_NUMBER(NULL), 4294967294, TO_NUMBER(NULL), 4294967293, TO_NUMBER(NULL), 4294967292, TO_NUMBER(NULL),
        4294967291, TO_NUMBER(NULL), BITAND(s.ksusefblocker, 65535)
    ) as final_blocking_session,
    DECODE(w.kslwtinwait,
        1, 'WAITING', decode(bitand(w.kslwtflags, 256), 0, 'WAITED UNKNOWN TIME',
        decode(round(w.kslwtstime / 10000), 0, 'WAITED SHORT TIME', 'WAITED KNOWN TIME'))
    ) as STATE,
    e.kslednam as event,
    e.ksledclass as wait_class,
    w.kslwtstime as wait_time_micro,
    sq.sql_text as sql_text,
    sq.sql_fulltext as sql_fulltext,
    sq_prev.sql_fulltext as prev_sql_fulltext,
    comm.command_name
FROM
  x$ksuse s,
  x$kslwt w,
  x$ksled e,
  v$sql sq,
  v$sql sq_prev,
  v$sqlcommand comm
WHERE
  BITAND(s.ksspaflg, 1) != 0
  AND BITAND(s.ksuseflg, 1) != 0
  AND s.inst_id = USERENV('Instance')
  AND s.indx = w.kslwtsid
  AND w.kslwtevt = e.indx
  AND s.ksusesqi = sq.sql_id(+)
  AND decode(s.ksusesch, 65535, TO_NUMBER(NULL), s.ksusesch) = sq.child_number(+)
  AND s.ksusepsi = sq_prev.sql_id(+)
  AND decode(s.ksusepch, 65535, TO_NUMBER(NULL), s.ksusepch) = sq_prev.child_number(+)
  AND s.ksuudoct = comm.command_type(+)
;

GRANT SELECT ON dd_session TO datadog ;

Agent ใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซ

ใ‚คใƒณใ‚นใƒˆใƒผใƒซๆ‰‹้ †ใซใคใ„ใฆใฏใ€Agent ใ‚คใƒณใ‚นใƒˆใƒผใƒซๆ‰‹้ †ใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚

Agent ใฎๆง‹ๆˆ

Oracle Agent ใฎใ‚ณใƒณใƒ•ใ‚ฃใ‚ฎใƒฅใƒฌใƒผใ‚ทใƒงใƒณใƒ•ใ‚กใ‚คใƒซ /etc/datadog-agent/conf.d/oracle.d/conf.yaml ใ‚’ไฝœๆˆใ—ใพใ™ใ€‚ไฝฟ็”จๅฏ่ƒฝใชใ™ในใฆใฎๆง‹ๆˆใ‚ชใƒ—ใ‚ทใƒงใƒณใฏใ€ใ‚ตใƒณใƒ—ใƒซใ‚ณใƒณใƒ•ใ‚ฃใ‚ฎใƒฅใƒฌใƒผใ‚ทใƒงใƒณใƒ•ใ‚กใ‚คใƒซใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚

ๆณจ: 7.53.0 ๆœชๆบ€ใฎ Agent ใƒชใƒชใƒผใ‚นใฎๆง‹ๆˆใ‚ตใƒ–ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใฏ oracle-dbm.d ใงใ™ใ€‚

init_config:
instances:
  - server: '<HOSTNAME_1>:<PORT>'
    service_name: "<CDB_SERVICE_NAME>" # Oracle CDB ใ‚ตใƒผใƒ“ใ‚นๅ
    username: 'c##datadog'
    password: 'ENC[datadog_user_database_password]'
    dbm: true
    tags:  # ใ‚ชใƒ—ใ‚ทใƒงใƒณ
      - 'service:<CUSTOM_SERVICE>'
      - 'env:<CUSTOM_ENV>'
  - server: '<HOSTNAME_2>:<PORT>'
    service_name: "<CDB_SERVICE_NAME>" # Oracle CDB ใ‚ตใƒผใƒ“ใ‚นๅ
    username: 'c##datadog'
    password: 'ENC[datadog_user_database_password]'
    dbm: true
    tags:  # ใ‚ชใƒ—ใ‚ทใƒงใƒณ
      - 'service:<CUSTOM_SERVICE>'
      - 'env:<CUSTOM_ENV>'

Agent ใฏใ€root ใƒžใƒซใƒใƒ†ใƒŠใƒณใƒˆใ‚ณใƒณใƒ†ใƒŠใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚น (CDB) ใซใฎใฟๆŽฅ็ถšใ—ใพใ™ใ€‚root CDB ใซๆŽฅ็ถšใ—ใฆใ„ใ‚‹้–“ใ€PDB ใซ้–ขใ™ใ‚‹ๆƒ…ๅ ฑใ‚’ใ‚ฏใ‚จใƒชใ—ใพใ™ใ€‚ๅ€‹ใ€…ใฎ PDB ใธใฎๆŽฅ็ถšใ‚’ไฝœๆˆใ—ใชใ„ใงใใ ใ•ใ„ใ€‚

init_config:
instances:
  - server: '<HOSTNAME_1>:<PORT>'
    service_name: "<SERVICE_NAME>" # The Oracle DB service name
    username: 'datadog'
    password: 'ENC[datadog_user_database_password]'
    dbm: true
    tags:  # Optional
      - 'service:<CUSTOM_SERVICE>'
      - 'env:<CUSTOM_ENV>'
  - server: '<HOSTNAME_2>:<PORT>'
    service_name: "<SERVICE_NAME>" # The Oracle DB service name
    username: 'datadog'
    password: 'ENC[datadog_user_database_password]'
    dbm: true
    tags:  # Optional
      - 'service:<CUSTOM_SERVICE>'
      - 'env:<CUSTOM_ENV>'
init_config:
instances:
  - server: '<HOSTNAME_1>:<PORT>'
    service_name: "<SERVICE_NAME>" # The Oracle DB service name
    username: 'datadog'
    password: 'ENC[datadog_user_database_password]'
    dbm: true
    tags:  # Optional
      - 'service:<CUSTOM_SERVICE>'
      - 'env:<CUSTOM_ENV>'
  - server: '<HOSTNAME_2>:<PORT>'
    service_name: "<SERVICE_NAME>" # The Oracle DB service name
    username: 'datadog'
    password: 'ENC[datadog_user_database_password]'
    dbm: true
    tags:  # Optional
      - 'service:<CUSTOM_SERVICE>'
      - 'env:<CUSTOM_ENV>'

ใ™ในใฆใฎ Agent ใฎๆง‹ๆˆใŒๅฎŒไบ†ใ—ใŸใ‚‰ใ€Datadog Agent ใ‚’ๅ†่ตทๅ‹•ใ—ใพใ™ใ€‚

Oracle ใ‚คใƒณใƒ†ใ‚ฐใƒฌใƒผใ‚ทใƒงใƒณใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใพใŸใฏๆคœ่จผใ™ใ‚‹

ๅˆใ‚ใฆใ‚คใƒณใ‚นใƒˆใƒผใƒซใ™ใ‚‹ๅ ดๅˆ

Datadog ใฎ Integrations ใƒšใƒผใ‚ธใงใ€็ต„็น”็”จใฎ Oracle ใ‚คใƒณใƒ†ใ‚ฐใƒฌใƒผใ‚ทใƒงใƒณใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ—ใฆใใ ใ•ใ„ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Šใ€Oracle ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใฎใƒ‘ใƒ•ใ‚ฉใƒผใƒžใƒณใ‚นใ‚’ใƒขใƒ‹ใ‚ฟใƒชใƒณใ‚ฐใ™ใ‚‹ใŸใ‚ใซไฝฟ็”จใงใใ‚‹ Oracle ใƒ€ใƒƒใ‚ทใƒฅใƒœใƒผใƒ‰ใŒใ‚ขใ‚ซใ‚ฆใƒณใƒˆใซใ‚คใƒณใ‚นใƒˆใƒผใƒซใ•ใ‚Œใพใ™ใ€‚

ใ™ใงใซใ‚คใƒณใ‚นใƒˆใƒผใƒซๆธˆใฟใฎๅ ดๅˆ

ๆ—ขๅญ˜ใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซใฎๅ ดๅˆใ€ๆง‹ๆˆใŒ conf.d/oracle-dbm.d/ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซใ‚ใ‚‹ใ“ใจใ‚’็ขบ่ชใ—ใพใ™ใ€‚ใƒฌใ‚ฌใ‚ทใƒผๆง‹ๆˆใ‚’ conf.d/oracle.d/ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‹ใ‚‰็งป่กŒใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ใ‹ใ‚‚ใ—ใ‚Œใพใ›ใ‚“ใ€‚

ๆฌกใฎใ‚ณใƒžใƒณใƒ‰ใ‚’ไฝฟ็”จใ—ใฆใ€Oracle ใ‚คใƒณใƒ†ใ‚ฐใƒฌใƒผใ‚ทใƒงใƒณใ‚’ใƒฌใ‚ฌใ‚ทใƒผใ‚คใƒณใƒ†ใ‚ฐใƒฌใƒผใ‚ทใƒงใƒณใ‹ใ‚‰ๆ–ฐใ—ใ„ใ‚คใƒณใƒ†ใ‚ฐใƒฌใƒผใ‚ทใƒงใƒณใซ็งป่กŒใ—ใพใ™ใ€‚

cp /etc/datadog-agent/conf.d/oracle.d/conf.yaml /etc/datadog-agent/conf.d/oracle-dbm.d/conf.yaml

ใƒฌใ‚ฌใ‚ทใƒผใ‚คใƒณใƒ†ใ‚ฐใƒฌใƒผใ‚ทใƒงใƒณใ‚’้žใ‚ขใ‚ฏใƒ†ใ‚ฃใƒ–ใซใ—ใพใ™ใ€‚

mv /etc/datadog-agent/conf.d/oracle.d/conf.yaml /etc/datadog-agent/conf.d/oracle.d/conf.yaml.bak

ใƒฌใ‚ฌใ‚ทใƒผใ‚คใƒณใƒ†ใ‚ฐใƒฌใƒผใ‚ทใƒงใƒณใ‚’้žใ‚ขใ‚ฏใƒ†ใ‚ฃใƒ–ใซใ™ใ‚‹ใจใ€ใ‚ทใ‚นใƒ†ใƒ ใƒกใƒˆใƒชใ‚ฏใ‚นใŒ 2 ๅ›ž้€ไฟกใ•ใ‚Œใชใใชใ‚Šใพใ™ใ€‚

Datadog Agent ใฏๅค–้ƒจใฎ Oracle ใ‚ฏใƒฉใ‚คใ‚ขใƒณใƒˆใ‚’ๅฟ…่ฆใจใ—ใชใ„ใฎใงใ€ๆ–ฐใ—ใ„ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใƒ•ใ‚กใ‚คใƒซ /etc/datadog-agent/conf.d/oracle-dbm.d/conf.yaml ใ‹ใ‚‰ jdbc_driver_path ๆง‹ๆˆใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’ๅ‰Š้™คใ—ใพใ™ใ€‚

ใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—ใฎๆคœ่จผ

Agent ใฎ status ใ‚ตใƒ–ใ‚ณใƒžใƒณใƒ‰ใ‚’ๅฎŸ่กŒใ—ใ€Checks ใ‚ปใ‚ฏใ‚ทใƒงใƒณใง oracle ใ‚’ๆŽขใ—ใพใ™ใ€‚Datadog ใฎใƒ€ใƒƒใ‚ทใƒฅใƒœใƒผใƒ‰ใจใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใฎใƒšใƒผใ‚ธใซ็งปๅ‹•ใ—ใฆ้–‹ๅง‹ใ—ใพใ™ใ€‚

ใ‚ซใ‚นใ‚ฟใƒ ใ‚ฏใ‚จใƒช

Database Monitoring ใฏใ€Oracle ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใฎใ‚ซใ‚นใ‚ฟใƒ ใ‚ฏใ‚จใƒชใ‚’ใ‚ตใƒใƒผใƒˆใ—ใฆใ„ใพใ™ใ€‚ไฝฟ็”จๅฏ่ƒฝใชๆง‹ๆˆใ‚ชใƒ—ใ‚ทใƒงใƒณใฎ่ฉณ็ดฐใซใคใ„ใฆใฏใ€conf.yaml.example ใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚

ใ‚ซใ‚นใ‚ฟใƒ ใ‚ฏใ‚จใƒชใ‚’ๅฎŸ่กŒใ™ใ‚‹ใจใ€Oracle ใซใ‚ˆใฃใฆ่ฟฝๅŠ ใ‚ณใ‚นใƒˆใพใŸใฏๆ‰‹ๆ•ฐๆ–™ใŒ่ชฒใ•ใ‚Œใ‚‹ๅ ดๅˆใŒใ‚ใ‚Šใพใ™ใ€‚

ๅ‚่€ƒ่ณ‡ๆ–™

ใŠๅฝนใซ็ซ‹ใคใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ€ใƒชใƒณใ‚ฏใ‚„่จ˜ไบ‹: