이 사이트에는 데이터베이스 모니터링이 지원되지 않습니다.
이 가이드는 데이터베이스 모니터링과 APM을 사용한다고 가정합니다. APM과 DBM에 연결하면 APM 트레이스 식별자가 DBM 데이터 수집에 삽입되고, 두 데이터 소스에 상관 관계가 생성됩니다. 이를 통해 APM 제품에 데이터베이스 정보를 표시하는 제품 기능을 사용할 수 있고, DBM 제품에 APM 데이터를 표시하는 기능을 사용할 수 있습니다.
시작 전 확인할 사항
- 지원되는 데이터베이스
- Postgres, MySQL, SQL Server
- 지원되는 에이전트 버전
- 7.46+
- 데이터 프라이버시
- SQL 주석 전파를 사용하면 기밀 데이터(서비스 이름)가 데이터베이스에 저장될 수 있고, 데이터베이스에 접근할 수 있는 제3자가 이 데이터에 액세스할 수 있습니다.
APM 트레이서 통합에서는 애플리케이션에 데이터베이스로 전송되는 정보 양을 통제하는 “전파 모드"를 지원합니다.
full
모드에서는 전체 트레이스 정보를 데이터베이스로 전송하며, DBM에서 개별 트레이스를 조사할 수 있습니다. 대부분의 통합에서 사용하기를 권장하는 모드입니다.service
모드에서는 서비스 이름을 전송하며, 데이터베이스 로드에 기여하는 서비스가 무엇인지 알 수 있습니다. 이 모드는 SQL Server 애플리케이션에서만 사용할 수 있습니다.none
모드에서는 전파를 비활성화하고 애플리케이션에서 어떤 정보도 전송하지 않습니다.
DD_DBM_PROPAGATION_MODE | Postgres | MySQL | SQL Server |
---|
full | | | |
service | | | |
지원되는 애플리케이션 트레이서 및 드라이버
* CommandType.StoredProcedure는 지원하지 않음
설정
최적의 경험을 하려면 애플리케이션에서 다음을 설정하세요.
DD_SERVICE=(application name)
DD_ENV=(application environment)
DD_VERSION=(application version)
앱 종속성을 dd-trace-go@v1.44.0 이상으로 업데이트 하세요.
go get gopkg.in/DataDog/dd-trace-go.v1@v1.44.0
contrib/database/sql
패키지를 가져오도록 코드를 업데이트하세요.
import (
"database/sql"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
sqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql"
)
다음 메서드 중 하나를 사용해 데이터베이스 모니터링 전파 기능을 활성화합니다.
환경 변수:
DD_DBM_PROPAGATION_MODE=full
드라이버 등록 중 코드 사용:
sqltrace.Register("postgres", &pq.Driver{}, sqltrace.WithDBMPropagation(tracer.DBMPropagationModeFull), sqltrace.WithServiceName("my-db-service"))
sqltrace.Open
에서 코드 사용:
sqltrace.Register("postgres", &pq.Driver{}, sqltrace.WithServiceName("my-db-service"))
db, err := sqltrace.Open("postgres", "postgres://pqgotest:password@localhost/pqgotest?sslmode=disable", sqltrace.WithDBMPropagation(tracer.DBMPropagationModeFull))
if err != nil {
log.Fatal(err)
}
전체 예시:
import (
"database/sql"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
sqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql"
)
func main() {
// 첫 단계는 드라이버를 등록할 때 dbm 전파 모드를 설정하는 것입니다. 이 단계는
// sqltrace에서도 가능합니다. 더 세세한 기능 통제를 하려면 오픈하세요.
sqltrace.Register("postgres", &pq.Driver{}, sqltrace.WithDBMPropagation(tracer.DBMPropagationModeFull))
// 다음은 오픈 호출 뒤에 옵니다.
db, err := sqltrace.Open("postgres", "postgres://pqgotest:password@localhost/pqgotest?sslmode=disable")
if err != nil {
log.Fatal(err)
}
// 그 후 database/sql 패키지를 평소처럼 추적과 함께 사용합니다.
rows, err := db.Query("SELECT name FROM users WHERE age=?", 27)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
}
Java 추적 계측 지침에 따라 에이전트 1.11.0
버전 이상을 설치합니다.
jdbc-datastore
계측 또한 활성화해야 합니다.
다음 메서드 중 하나를 선택해 데이터베이스 모니터링 전파 기능을 활성화합니다.
- 시스템 속성
dd.dbm.propagation.mode=full
설정 - 환경 변수
DD_DBM_PROPAGATION_MODE=full
설정
전체 예시:
# Start the Java Agent with the required system properties
java -javaagent:/path/to/dd-java-agent.jar -Ddd.dbm.propagation.mode=full -Ddd.integration.jdbc-datasource.enabled=true -Ddd.service=my-app -Ddd.env=staging -Ddd.version=1.0 -jar path/to/your/app.jar
애플리케이션에서 기능 테스트:
public class Application {
public static void main(String[] args) {
try {
Connection connection = DriverManager
.getConnection("jdbc:postgresql://127.0.0.1/foobar?preferQueryMode=simple", "user", "password");
Statement stmt = connection.createStatement();
String sql = "SELECT * FROM foo";
stmt.execute(sql);
stmt.close();
connection.close();
} catch (SQLException exception) {
// exception logic
}
}
}
Gemfile에서 dd-trace-rb를 1.8.0
이상 버전으로 설치하거나 업데이트합니다.
source 'https://rubygems.org'
gem 'ddtrace', '>= 1.8.0'
# Depends on your usage
gem 'mysql2'
gem 'pg'
다음 메서드 중 하나를 선택해 데이터베이스 모니터링 전파 기능을 활성화합니다.
환경 변수:
DD_DBM_PROPAGATION_MODE=full
mysql2이나 pg의 경우 comment_propagation
옵션(기본값: ENV['DD_DBM_PROPAGATION_MODE']
):
Datadog.configure do |c|
c.tracing.instrument :mysql2, comment_propagation: 'full'
c.tracing.instrument :pg, comment_propagation: 'full'
end
전체 예시:
require 'mysql2'
require 'ddtrace'
Datadog.configure do |c|
c.service = 'billing-api'
c.env = 'production'
c.version = '1.3-alpha'
c.tracing.instrument :mysql2, comment_propagation: ENV['DD_DBM_PROPAGATION_MODE']
end
client = Mysql2::Client.new(:host => "localhost", :username => "root")
client.query("SELECT 1;")
앱 종속성에 dd-trace-py>=1.9.0을 포함하도록 업데이트합니다.
pip install "ddtrace>=1.9.0"
psycopg2를 설치합니다(참고: MySQL 클라이언트에는 DBM과 APM 연결이 지원되지 않습니다).
다음 환경 변수를 설정해 데이터베이스 모니터링 전파 기능을 활성화합니다.
DD_DBM_PROPAGATION_MODE=full
전체 예시:
import psycopg2
POSTGRES_CONFIG = {
"host": "127.0.0.1",
"port": 5432,
"user": "postgres_user",
"password": "postgres_password",
"dbname": "postgres_db_name",
}
# connect to postgres db
conn = psycopg2.connect(**POSTGRES_CONFIG)
cursor = conn.cursor()
# execute sql queries
cursor.execute("select 'blah'")
cursor.executemany("select %s", (("foo",), ("bar",)))
이 기능을 사용하려면 .NET 서비스에 자동 계측이 활성화되어 있어야 합니다.
.NET Framework 추적 지침이나 .NET Core 추적 지침을 따라 자동 계측 패키지를 설치하고 서비스 추적을 활성화합니다.
지원되는 클라이언트 라이브러리를 사용하고 있는지 확인하세요(예: Npgsql
).
다음 환경 변수를 설정해 데이터베이스 모니터링 전파 기능을 활성화합니다.
- Postgres 및 MySQL:
DD_DBM_PROPAGATION_MODE=full
- SQL Server:
DD_DBM_PROPAGATION_MODE=service
SQL Server는 서버에서 전체 트레이스 컨텍스트를 포함한 문을 캐싱하지 못하기 때문에 전체 전파 모드를 지원하지 않습니다.
이 기능을 사용하려면 PHP 서비스에서 트레이서 기능이 활성화되어 있어야 합니다.
PHP 추적 지침을 따라 자동 계측 패키지를 설치하고 서비스 추적을 활성화합니다.
지원되는 클라이언트 라이브러리를 사용하고 있는지 확인하세요(예: PDO
).
다음 환경 변수를 설정해 데이터베이스 모니터링 전파 기능을 활성화합니다.
DD_DBM_PROPAGATION_MODE=full
dd-trace-js를 3.17.0
(또는 서비스 종료된 Node.js 버전 12를 사용하는 경우 2.30.0
) 이상 버전으로 설치하거나 업데이트합니다.
npm install dd-trace@^3.17.0
가져올 코드를 업데이트하고 트레이서를 초기화합니다.
// This line must come before importing any instrumented module.
const tracer = require('dd-trace').init();
다음 메서드 중 하나를 사용해 데이터베이스 모니터링 전파를 활성화합니다.
환경 변수:
DD_DBM_PROPAGATION_MODE=full
dbmPropagationMode
옵션(기본값: ENV['DD_DBM_PROPAGATION_MODE']
):
tracer.use('pg', { dbmPropagationMode: 'full', service: 'my-db-service' })
전체 예시:
const pg = require('pg')
const tracer = require('dd-trace').init()
tracer.use('pg', { dbmPropagationMode: 'full', service: 'my-db-service' })
const client = new pg.Client({
user: 'postgres',
password: 'postgres',
database: 'postgres'
})
client.connect(err => {
console.error(err);
process.exit(1);
});
client.query('SELECT $1::text as message', ['Hello world!'], (err, result) => {
// handle result
})
DBM에서 APM 연결 탐색
활성 데이터베이스 연결을 APM 서비스 호출에 할당
특정 호스트에서 요청을 실행하는 업스트림 APM 서비스별로 분석할 수 있습니다. 데이터베이스에서 개별 서비스에 로드를 할당해 데이터베이스에서 어떤 서비스가 활성화 정도가 가장 높은지 볼 수 있습니다. 활성화 정도가 높은 업스트림 서비스의 서비스 페이지로 이동해 더 조사해 보세요.
호출하는 APM 서비스별로 데이터베이스 호스트 필터링
데이터베이스 목록을 빠르게 필터링해 특정 APM 서비스가 종속된 데이터베이스 호스트만 표시할 수 있습니다. 차단 활동이 있어 서비스 성능에 문제를 일으키는 다운스트림 종속성이 있는지 쉽게 확인할 수 있습니다.
쿼리 샘플에 연결된 트레이스 보기
데이터베이스 모니터링에서 쿼리 샘플을 볼 때 연결된 트레이스를 APM이 샘플했다면 APM 트레이스 컨텍스트에서 DBM 샘플을 볼 수 있습니다. 이를 통해 실행 계획과 쿼리 성능 내역을 포함한 DBM 원격 분석을 결합할 수 있습니다. 또한 인프라스트럭처 내 스팬 계보를 알 수 있어 데이터베이스에 애플리케이션 성능 문제를 일으키는 변화가 있었는지 파악할 수 있습니다.
APM에서 DBM 연결 탐색
APM 서비스의 다운스트림 데이터베이스 시각화
APM 서비스 페이지에서 데이터베이스 모니터링으로 파악한 서비스의 다운스트림 데이터베이스 종속성을 바로 볼 수 있습니다. 성능을 저하시키는 요인으로 인해 너무 많은 로드가 있는 호스트를 빠르게 찾아낼 수 있습니다.
실행 계획을 이용해 트레이스에 있는 데이터베이스 쿼리에서 잠재적 최적화 방법 파악
샘플된 대기 이벤트, 평균 대기 시간, 최근 캡처된 실행 계획 등 트레이스에서 실행된 쿼리와 유사한 쿼리의 성능 내역을 확인하여 향후 쿼리 성능을 컨텍스트 속에서 파악할 수 있습니다. 비정상적인 동작이 있는지 확인한 후 데이터베이스 모니터링으로 이동해 데이트베이스 호스트와 관련한 추가 컨텍스트를 더 자세히 조사할 수 있습니다.