- 필수 기능
- 시작하기
- Glossary
- 표준 속성
- Guides
- Agent
- 통합
- 개방형텔레메트리
- 개발자
- Administrator's Guide
- API
- Datadog Mobile App
- CoScreen
- Cloudcraft
- 앱 내
- 서비스 관리
- 인프라스트럭처
- 애플리케이션 성능
- APM
- Continuous Profiler
- 스팬 시각화
- 데이터 스트림 모니터링
- 데이터 작업 모니터링
- 디지털 경험
- 소프트웨어 제공
- 보안
- AI Observability
- 로그 관리
- 관리
이 가이드는 데이터베이스 모니터링을 설정하였고 애플리케이션 성능 모니터링(APM)을 사용하고 있다고 가정합니다. APM 및 DBM을 연결하면 APM 트레이스 식별자가 DBM 데이터 수집으로 전달됩니다. 이를 통해 이들 두 데이터 소스를 연계할 수 있으며 APM 제품에서 데이터 정보를 표시하고 DBM 제품에서 APM 데이터를 표시하는 제품 기능을 활성화할 수 있습니다.
애플리케이션 성능 모니터링(APM) 트레이서 통합은 전파 모드를 지원하며 전파 모드는 애플리케이션에서 데이터베이스로 전달되는 정보량을 제어합니다.
full
모드는 전체 트레이스 정보를 데이터베이스로 전송하여 DBM 내 개별 트레이스를 조사할 수 있도록 해줍니다. 대부분의 통합에서 이는 권장되는 솔루션입니다.service
모드는 서비스 이름을 전송하여 어느 서비스가 데이터베이스 부하에 기여하는지 이해할 수 있도록 해줍니다. 이는 Oracle 애플리케이션에서만 지원되는 모드입니다.disabled
모드는 전파를 비활성화하므로 애플리케이션에서 아무 정보도 전송하지 않습니다.DD_DBM_PROPAGATION_MODE | Postgres | MySQL | SQL 서버 | Oracle |
---|---|---|---|---|
full | * | ** | ||
service |
* Aurora MySQL의 전체 전파 모드에는 버전 3이 필요합니다.
** SQL Server에서는 Java와 .NET 트레이서만 지원합니다.
지원되는 애플리케이션 트레이서 및 드라이버
언어 | 라이브러리 또는 프레임워크 | Postgres | MySQL | SQL 서버 | Oracle |
---|---|---|---|---|---|
Go: dd-trace-go >= 1.44.0 | |||||
database/sql | service 모드만 | service 모드만 | |||
sqlx | service 모드만 | service 모드만 | |||
Java dd-trace-java >= 1.11.0 | |||||
jdbc | ** | service 모드만 | |||
Ruby: dd-trace-rb >= 1.8.0 | |||||
pg | |||||
mysql2 | |||||
Python: dd-trace-py >= 1.9.0 | |||||
psycopg2 | |||||
dd-trace-py >= 2.9.0 | |||||
asyncpg | |||||
aiomysql | |||||
mysql-connector-python | |||||
mysqlclient | |||||
pymysql | |||||
.NET dd-trace-dotnet >= 2.35.0 | |||||
Npgsql * | |||||
MySql.Data * | |||||
MySqlConnector * | |||||
ADO.NET * | ** | ||||
PHP dd-trace-php >= 0.86.0 | |||||
pdo | |||||
MySQLi | |||||
Node.js: dd-trace-js >= 3.17.0 | |||||
postgres | |||||
mysql | |||||
mysql2 |
* CommandType.StoredProcedure 지원 안 됨
** 풀 모드 SQL Server/Java:
SET context_info
명령을 실행하며, 데이터베이스를 추가 왕복합니다.context_info
를 사용해 애플리케이션을 계측하는 경우, APM 트레이서가 재정의합니다.최상의 사용자 경험을 위해 다음 환경 변수가 애플리케이션에 설정되어 있는지 확인하세요.
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)
}
// 그 뒤 계속하여 평소처럼 데이터베이스 /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-datasource
계측을 활성화해야 합니다.
다음 방법 중 하나를 사용하여 데이터베이스 모니터링 전파 기능을 활성화합니다.
dd.dbm.propagation.mode=full
설정DD_DBM_PROPAGATION_MODE=full
설정전체 예시:
# 필수 시스템 속성을 포함하는 자바(Java) 에이전트를 시작합니다.
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
}
}
}
참고: 준비된 문장은 full
모드에서 지원되지 않으며, 준비된 문장을 사용하는 모든 JDBC API 호출은 자동으로 service
모드로 다운그레이드됩니다. 대부분의 자바(Java) SQL 라이브러리는 기본적으로 준비된 문장을 사용하므로, 대부분의 자바(Java) 애플리케이션은 service
모드만 사용할 수 있습니다.
젬파일에서 dd-trace-rb을 버전 1.8.0
이상으로 설치하거나 업데이트합니다:
source 'https://rubygems.org'
gem 'datadog' # v1.x을 사용하는 경우 `'ddtrace', '>= 1.8.0'`를 사용합니다.
# 사용량에 따라 다음을 설정합니다.
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 설치:
pip install psycopg2
다음 환경 변수를 설정해 데이터베이스 모니터링 전파 기능을 활성화합니다.
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",
}
# POSTGRES DB로 연결
conn = psycopg2.connect(**POSTGRES_CONFIG)
cursor = conn.cursor()
# SQL 쿼리 실행
cursor.execute("select 'blah'")
cursor.executemany("select %s", (("foo",), ("bar",)))
.NET Framework 추적 지침이나 .NET Core 추적 지침을 따라 자동 계측 패키지를 설치하고 서비스 추적을 활성화합니다.
지원되는 클라이언트 라이브러리를 사용하고 있는지 확인하세요(예: Npgsql
).
다음 환경 변수를 설정해 데이터베이스 모니터링 전파 기능을 활성화합니다.
DD_DBM_PROPAGATION_MODE=full
DD_DBM_PROPAGATION_MODE=service
또는 Java와 .Net 트레이서가 있는 DD_DBM_PROPAGATION_MODE=full
DD_DBM_PROPAGATION_MODE=service
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']
).
const tracer = require('dd-trace').init({ dbmPropagationMode: 'full' })
통합 수준에서만 활성화:
const tracer = require('dd-trace').init();
tracer.use('pg', {
dbmPropagationMode: 'full'
})
전체 예시:
const pg = require('pg')
const tracer = require('dd-trace').init({ dbmPropagationMode: 'full' })
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) => {
// 결과 처리
})
특정 호스트에서 요청을 실행하는 업스트림 APM 서비스별로 분석할 수 있습니다. 데이터베이스에서 개별 서비스에 로드를 할당해 데이터베이스에서 어떤 서비스가 활성화 정도가 가장 높은지 볼 수 있습니다. 활성화 정도가 높은 업스트림 서비스의 서비스 페이지로 이동해 더 조사해 보세요.
데이터베이스 목록을 빠르게 필터링해 특정 APM 서비스가 종속된 데이터베이스 호스트만 표시할 수 있습니다. 차단 활동이 있어 서비스 성능에 문제를 일으키는 다운스트림 종속성이 있는지 쉽게 확인할 수 있습니다.
데이터베이스 모니터링에서 쿼리 샘플을 볼 때 연결된 트레이스를 APM이 샘플했다면 APM 트레이스 컨텍스트에서 DBM 샘플을 볼 수 있습니다. 이를 통해 실행 계획과 쿼리 성능 내역을 포함한 DBM 원격 분석을 결합할 수 있습니다. 또한 인프라스트럭처 내 스팬 계보를 알 수 있어 데이터베이스에 애플리케이션 성능 문제를 일으키는 변화가 있었는지 파악할 수 있습니다.
애플리케이션 성능 모니터링(APM) 기존 서비스 페이지에서 데이터베이스 모니터링으로 식별한 서비스의 다운스트림 데이터베이스 종속성을 바로 볼 수 있습니다. 오류 요인으로 인해 비정상적 로드가 존재하는 호스트를 빠르게 찾아낼 수 있습니다. 서비스 페이지를 보려면 서비스 카탈로그에서 해당 서비스를 클릭하여 세부 정보 패널을 연 다음 패널에서 서비스 페이지 보기를 클릭합니다.
샘플된 대기 이벤트, 평균 대기 시간, 최근 캡처된 실행 계획 등 트레이스에서 실행된 쿼리와 유사한 쿼리의 성능 내역을 확인하여 향후 쿼리 성능을 컨텍스트 속에서 파악할 수 있습니다. 비정상적인 동작이 있는지 확인한 후 데이터베이스 모니터링으로 이동해 데이트베이스 호스트와 관련한 추가 컨텍스트를 더 자세히 조사할 수 있습니다.
추가 유용한 문서, 링크 및 기사: