GCP(GCE)에서 Laravel 로그를 StackDriver로 출력
12646 단어 stackdrivergcp라라벨gce
GCP에서 Laravel 로그를 StackDriver로 출력하려면
TL;DR
monolog-stackdriver
를 사용하여 Laravel 로그를 stackDriver에서 볼 수 있습니다.instance_id
로그 전송 절차
composer로 패키지 도입
이 패키지를 사용합니다.
htps : // Pac cross st. 오 rg / pac 게이 s / 코데 니 r
라이브러리 배포 명령
composer require codeinternetapplications/monolog-stackdriver
로그 대상을 설정하려면
1.ENV 파일 설정
2.config/logging.php 설정
config/logging.php는 StackDriver의 표시 대상에서 설정량이 다릅니다.
ENV 파일 설정
로그를 보려는 레벨에 맞게 env를 나열합니다.
env
# 必須
LOG_CHANNEL=stackdriver
# インスタンス名別のログ保存する場合
GCP_LOG_RESOURCE_NAME=hoge_resource
# インスタンス(マシーン)単位のログ保存する場合
GCP_LOG_INSTANCE_ID=hoge_xxxxxx
GCP_LOG_PROJECT_ID=hoge_id
GCP_LOG_ZONE=hoge_zone
hoge_
의 값을 적절한 값으로 변경하십시오.config/logging.php 설정
글로벌로 표시되도록 설정하는 경우
config/logging.php
'channels' => [
// ( ... )
'stackdriver' => [
'driver' => 'custom',
'via' => CodeInternetApplications\MonologStackdriver\Laravel\CreateStackdriverLogger::class,
'logName' => env('APP_NAME', 'my-project-log'),
//GCP内部からの保存には必要ない
// 'loggingClientOptions' => [
// 'keyFilePath' => '/path/to/service-account-key-file.json',
// ],
// 'loggerOptions' => [],
// 'lineFormat' => '%message%',
// 'entryOptionsWrapper' => 'stackdriver',
],
]
logName
항목은 적절한 이름을 붙여 주세요loggingClientOptions
항목에서 json 키 파일을 지정하지만 GCP 내부에서 로그를 보내는 데 json이 필요하지 않습니다.다른 클라우드(예: AWS)에서 전송할 때 지정합니다.
로그 표시 예
아래에서 설명하는 항목으로 로그 보내기
좋은 점
- 설정이 간단
- 많은 경우에 적용 가능
- 여러 인스턴스 프로그램에서 로그를 집계할 수 있습니다.
나쁜 점
- 복수의 머신으로부터의 로그를 식별하는 궁리가 별도 필요
- 오류 조사 시 전역과 머신 로그를 왕복하여 비교해야 함
인스턴스 이름별로 표시되도록 설정하는 경우
config/logging.php
'channels' => [
// ( ... )
'stackdriver' => [
'driver' => 'custom',
'via' => CodeInternetApplications\MonologStackdriver\Laravel\CreateStackdriverLogger::class,
'logName' => env('APP_NAME', 'my-project-log'),
'loggerOptions' => [
'labels' => [
'compute.googleapis.com/resource_name' => env('GCP_LOG_RESOURCE_NAME', 'dev-web-instance'),
],
'resource' => [
'type' => 'gce_instance',
],
]
//GCP内部からの保存には必要ない
// 'loggingClientOptions' => [
// 'keyFilePath' => '/path/to/service-account-key-file.json',
// ],
// 'loggerOptions' => [],
// 'lineFormat' => '%message%',
// 'entryOptionsWrapper' => 'stackdriver',
],
]
전역 설정에
loggerOptions
를 추가하고 있습니다.여기에서는 GCE의 로그이므로 인스턴트에 GCE를 지정하고 있습니다.
지정하고 싶은 부분의 로그에서 실제로 지정된 항목을 설정 파일에 복사하면 그 위치에 들어가게 됩니다.
로그 표시 예
아래에서 설명하는 항목으로 로그 보내기
좋은 점
- 서버와 같은 카테고리이므로 시간축에 따른 파악이 가능
- 머신을 그룹화하지 않으면 머신 이름과 로그가 일치합니다.
- 오토스케일 머신에서도 그룹에 집약되는 형태로 취득 가능
나쁜 점
- 머신의 식별은 할 수 없다
- instance_id가 비어 있어도 표시할 수 있지만, 정상적인 로그 사양으로 문제가 없는지 불명
인스턴스(머신) 단위로 표시되도록 설정하는 경우
config/logging.php
'channels' => [
// ( ... )
'stackdriver' => [
'driver' => 'custom',
'via' => CodeInternetApplications\MonologStackdriver\Laravel\CreateStackdriverLogger::class,
'logName' => env('APP_NAME', 'my-project-log'),
'loggerOptions' => [
'labels' => [
'compute.googleapis.com/resource_name' => env('GCP_LOG_RESOURCE_NAME', 'dev-web-instance'),
],
'resource' => [
'type' => 'gce_instance',
'labels' => [
'instance_id' => env('GCP_LOG_INSTANCE_ID'),
'project_id' => env('GCP_LOG_PROJECT_ID'),
'zone' => env('GCP_LOG_ZONE'),
]
],
]
//GCP内部からの保存には必要ない
// 'loggingClientOptions' => [
// 'keyFilePath' => '/path/to/service-account-key-file.json',
// ],
// 'loggerOptions' => [],
// 'lineFormat' => '%message%',
// 'entryOptionsWrapper' => 'stackdriver',
],
]
인스턴스 이름별 설정에
loggerOptions.resource.labels
를 추가했습니다.instance_id는 Compute Engine의 상세 페이지입니다.
project_id는 TOP 페이지에 나와 있습니다.
로그 표시 예
(생략)
좋은 점
- 서버 정보와 같은 위치에 저장되므로 시간축을 따라 파악하기 쉽습니다.
- 머신의 식별도 가능
나쁜 점
- 오토스케일로 id가 바뀌는 경우의 대응을 생각할 필요가 있다
로그 전송
Laravel의 표준 코드로 전송이 가능
로그 전송 코드 예
//infoレベルログ
Log::info('InfoLogInfoTest', ['logItem1' => 'メッセージはあとから分かりやすいものを', 'logItem2' => ['ItemSub1' => '配列形式で自由にデータを入れられる', 'ItemSub2' => '入れ子も問題なし'] ]);
// errorレベルログ
Log::error('InfoLogErrorTest', ['logItem1' => 'エラーもStackDriverで正しく識別', 'logItem2' => ['ItemSub1' => '配列形式で自由にデータを入れられる', 'ItemSub2' => '入れ子も問題なし'] ]);
첫 번째 인수는
message
에 저장됩니다.두 번째 인수는
jsonPayload
에 저장됩니다.StackDriver에 로그 레벨도 인식되어 있으므로
Error
이상입니다.
Reference
이 문제에 관하여(GCP(GCE)에서 Laravel 로그를 StackDriver로 출력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Quantum/items/cd06c1c8d9e9142a5115텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)