애플리케이션 로그 보기
이 페이지의 내용
App Services UI
App Services UI에서는 애플리케이션의 로그를 보고, 필터링하고, 검색하고, 다운로드할 수 있습니다. 앱 로그를 보려면 왼쪽 탐색 메뉴에서 Logs 을(를) 클릭합니다.
로그 필터링
드롭다운 메뉴를 사용하면 사전 정의된 유형의 로그 항목과 항목 상태를 기준으로 필터링할 수 있습니다. 날짜 범위를 지정하고, 사용자 ID로 필터링하고, 특정 요청 ID와 연결된 항목만 표시할 수도 있습니다.
로그 항목 수 제한
자리 표시자 텍스트 Max # of Logs 가 있는 텍스트 필드에 페이지에 표시할 최대 결과 수를 입력합니다. 한도를 초과하는 기록이 더 많은 경우 로그 항목 목록 하단에 Load More 버튼이 표시됩니다.
로그 다운로드
Apply 버튼 오른쪽에 있는 다운로드 버튼을 클릭하여 필터 기준을 충족하는 로그 항목(또는 필터를 지정하지 않은 경우 모든 로그 항목)을 다운로드합니다. 이 버튼을 클릭하면 적용할 필터를 확인하고 결과 수를 제한(선택 사항)할 수 있는 대화 상자가 나타납니다. 결과 로그 항목 collection은 .zip 형식입니다. 단일 JSON 파일이 포함된 파일입니다.
앱 서비스 CLI
터미널에서 애플리케이션 로그에 액세스하거나 App Services CLI를 사용하여 shell 스크립트에 액세스할 수 있습니다.
최근 로그 보기
애플리케이션에 대한 가장 최근 로그 항목 100개를 반환하려면 appservices
logs list
을(를) 실행합니다.
appservices logs list
실시간 테일 로그
--tail
플래그를 사용하여 애플리케이션 로그가 들어오는 대로 표시하는 스트림을 열 수 있습니다.
appservices logs list --tail
오류 로그 보기
--errors
플래그를 사용하여 오류 로그만 볼 수 있습니다. 플래그를 지정하지 않으면 명령은 오류 로그와 일반 로그를 모두 반환합니다.
appservices logs list --errors
유형별 로그 필터링
--type
플래그를 사용하여 하나 이상의 특정 유형의 로그를 볼 수 있습니다. 유형을 지정하지 않으면 명령은 모든 유형의 로그를 반환합니다.
다음 유형이 유효합니다:
auth
function
push
service
trigger
graphql
sync
schema
trigger_error_handler
log_forwarder
endpoint
appservices logs list --type=function --type=trigger
날짜 범위에 대한 로그 보기
--start
및 --end
플래그를 사용하여 다양한 날짜의 로그를 볼 수 있습니다. 플래그는 ISODate 문자열을 허용하며 별도로 또는 함께 사용할 수 있습니다.
appservices logs list --start="2021-01-01T00:00:00.000+0000" --end="2021-02-01T00:00:00.000+0000"
App Services API
관리자 API 로그 엔드포인트를 호출하여 HTTPS를 통해 애플리케이션의 로그에 액세스 할 수 있습니다.
관리자 API를 사용하려면 프로젝트 ID, 앱 ID 및 인증 자격 증명이 필요합니다. 이를 찾는 방법을 알아보려면 프로젝트 및 애플리케이션 ID 및 인증 토큰 가져오기를 참조하세요.
이 섹션의 예제에서는 함수에 다음 헬퍼 함수를 사용합니다 .
async function authenticate(publicApiKey, privateApiKey) { const result = await context.http.post({ url: `${ADMIN_API_BASE_URL}/auth/providers/mongodb-cloud/login`, headers: { "Content-Type": ["application/json"], "Accept": ["application/json"], }, body: { "username": publicApiKey, "apiKey": privateApiKey, }, encodeBodyAsJSON: true }) return EJSON.parse(result.body.text()); } function formatQueryString(queryParams) { const params = Object.entries(queryParams); return params.length > 0 ? "?" + params.map(([a, b]) => `${a}=${b}`).join("&") : "" }
최근 로그 가져오기
애플리케이션에 대한 가장 최근 로그 항목 100개를 반환하려면 추가 매개변수 없이 로깅 엔드포인트를 호출합니다.
const ADMIN_API_BASE_URL = "https://services.cloud.mongodb.com/api/admin/v3.0"; exports = async function() { // Get values that you need for requests const projectId = "<Atlas Project ID>"; const appId = "<App ID>"; const publicApiKey = "<Atlas Public API Key>"; const privateApiKey = "<Atlas Private API Key>"; // Authenticate with the Atlas API Key const { access_token } = await authenticate(publicApiKey, privateApiKey); // Get logs for your App const logsEndpoint = `${ADMIN_API_BASE_URL}/groups/${projectId}/apps/${appId}/logs`; const request = { "url": logsEndpoint, "headers": { "Authorization": [`Bearer ${access_token}`] } }; const result = await context.http.get(request); const logs = EJSON.parse(result.body.text()); return logs; }
날짜 범위에 대한 로그 가져오기
특정 날짜 범위의 로그 항목을 반환하려면 start_date
및 end_date
필드 중 하나 또는 둘 다를 사용하여 로깅 엔드포인트를 호출합니다.
참고
결과 페이지 매김
지정한 날짜 범위에 100 개 이상의 로그 항목이 포함된 경우 모든 항목에 액세스하려면 여러 쿼리를 실행해야 합니다. 방법을 알아보려면 페이지 매김 로그 가져오기를 참조하세요.
const ADMIN_API_BASE_URL = "https://services.cloud.mongodb.com/api/admin/v3.0"; exports = async function() { // Get values that you need for requests const projectId = "<Atlas Project ID>"; const appId = "<App ID>"; const publicApiKey = "<Atlas Public API Key>"; const privateApiKey = "<Atlas Private API Key>"; // Authenticate with the Atlas API Key const { access_token } = await authenticate(publicApiKey, privateApiKey); // Get logs for your App const logsEndpoint = `${ADMIN_API_BASE_URL}/groups/${projectId}/apps/${appId}/logs`; const request = { "url": logsEndpoint + formatQueryString({ start_date: "2019-07-01", end_date: "2019-07-31", }), "headers": { "Authorization": [`Bearer ${access_token}`] } }; const result = await context.http.get(request); const logs = EJSON.parse(result.body.text()); return logs; }
페이지가 매겨진 로그 가져오기
App Services는 각 요청에 대해 최대 100개의 로그 항목을 반환합니다. 쿼리가 100개 이상의 로그 항목과 일치하는 경우, API는 100개의 결과 중 첫 번째 '페이지'를 반환하고 응답에 추가 매개변수를 포함하여 최대 100개 항목의 다음 페이지를 가져오기 위해 제공할 수 있습니다.
참고
페이지가 매겨진 응답
페이지가 매겨진 응답은 다음 문서와 유사하며, 여기서 nextEndDate
및 nextSkip
는 선택 사항입니다.
{ logs: [<Log Entry>, ...], nextEndDate: "<End date of the next page>", nextSkip: <Offset of the next page>, }
const ADMIN_API_BASE_URL = "https://services.cloud.mongodb.com/api/admin/v3.0"; exports = async function() { // Get values that you need for requests const projectId = "<Atlas Project ID>"; const appId = "<App ID>"; const publicApiKey = "<Atlas Public API Key>"; const privateApiKey = "<Atlas Private API Key>"; // Authenticate with the Atlas API Key const { access_token } = await authenticate(publicApiKey, privateApiKey); // Get logs for your App const pager = new LogPager(projectId, appId, access_token); const firstPage = await pager.getNextPage(); const secondPage = await pager.getNextPage(firstPage); const thirdPage = await pager.getNextPage(secondPage); const allLogs = await pager.getAllLogs(); } class LogPager { constructor(projectId, appId, access_token, queryParams={}) { this.logsEndpoint = `${ADMIN_API_BASE_URL}/groups/${projectId}/apps/${appId}/logs`; this.queryParams = queryParams; this.authHeaders = { Authorization: [`Bearer ${access_token}`] } } async getNextPage(prevPage) { const { nextEndDate, nextSkip } = prevPage || {}; if(prevPage && !nextEndDate) { throw new Error("Paginated API does not have any more pages.") } const request = { "headers": this.authHeaders, "url": this.logsEndpoint + formatQueryString({ ...this.queryParams, end_date: nextEndDate, skip: nextSkip, }), } const result = await context.http.get(request); const nextPage = EJSON.parse(result.body.text()); return nextPage } async getAllLogs() { // Note: If your query parameters match too many logs this might time out let logs = [] let hasNext = true; let prevPage = null while(hasNext) { const page = await getNextPage(prevPage); logs = logs.concat(page.logs); hasNext = page.nextEndDate prevPage = page } return logs; } }