OpenTelemetry Collector를 서버 또는 가상 머신에 직접 설치하여 자체 호스팅 Elasticsearch 클러스터를 모니터링하세요. 뉴렐릭은 도면 설정 및 모니터링 요구 사항에 맞는 유연한 구현, 배포 옵션을 제공합니다.
수집기 배포 방식은 두 가지 중에서 선택할 수 있습니다.
- NRDOT: 뉴럴릭 OpenTelemetry배포
- OTel Collector Contrib: 커뮤니티에서 제공한 구성 요소를 포함하는 표준 OpenTelemetry Collector
설치 옵션
필요에 맞는 수집기 배포 방식을 선택하십시오.
중요
NRDOT의 Elasticsearch 모니터링 지원 기능이 곧 제공될 예정입니다! 업데이트 소식을 기대해주세요!
시작하기 전에
OTel Collector Contrib을 구성하기 전에 다음 사항을 확인하십시오.
필요한 접근 권한:
너의 뉴렐릭
호스트 시스템에 대한 루트 또는 sudo 권한
monitor또는manage클러스터 권한을 가진 Elasticsearch 클러스터 관리자 권한 (자세한 내용은 Elasticsearch 보안 권한 문서를 참조하십시오)시스템 요구사항:
Elasticsearch 버전 7.16 이상 - 이 통합 기능을 사용하려면 최신 Elasticsearch 클러스터가 필요합니다.
네트워크 연결 - 뉴렐릭의 OTLP 수집 엔드포인트로의 아웃바운드 HTTPS(포트 443)
설정값이 준비되었습니다:
Elasticsearch 엔드포인트 - Elasticsearch 클러스터 URL(예:
http://localhost:9200)Cluster 이름 - 클러스터에 대한 고유한 클러스터 이름입니다.
중요
진행하기 전에 호스트에 OpenTelemetry Collector Contrib이 설치되어 있어야 합니다. systemd 서비스 유닛이 올바르게 생성되도록 공식 패키지(.deb 또는 .rpm)를 통해 설치하는 것을 권장합니다.
Elasticsearch 모니터링을 구성합니다.
OTel Collector Contrib이 설치되면 수집기의 기본 설정 파일을 Elasticsearch 모델링 설정으로 바꿉니다. 이렇게 하면 Elasticsearch 메트릭 수집이 가능해집니다. 호스트 메트릭 및 로그는 선택 사항이며 별도로 추가할 수 있습니다.
설정 파일의 위치는 다음과 같습니다. /etc/otelcol-contrib/config.yaml
팁
기본 설정을 백업하세요: 설정 파일을 수정하기 전에 기본 설정을 보존하기 위해 백업 복사본을 만드세요.
$sudo cp /etc/otelcol-contrib/config.yaml /etc/otelcol-contrib/config.yaml.backup수집기를 구성하려면 다음 단계를 따르세요.
루트 또는 sudo 권한으로 텍스트 편집기를 사용하여 설정 파일을 엽니다.
bash$sudo nano /etc/otelcol-contrib/config.yaml기존 콘텐츠를 모두 삭제하고 다음 Elasticsearch 모니터링 설정으로 교체하십시오.
중요
endpoint값을 Elasticsearch 클러스터 입체포인트로 바꾸고 프로세서 블록의elasticsearch.cluster.name고유한 이름으로 업데이트하여 뉴렐릭에서 클러스터를 식별하세요.receivers:elasticsearch:endpoint: "http://localhost:9200"collection_interval: 15smetrics:elasticsearch.os.cpu.usage:enabled: trueelasticsearch.cluster.data_nodes:enabled: trueelasticsearch.cluster.health:enabled: trueelasticsearch.cluster.in_flight_fetch:enabled: trueelasticsearch.cluster.nodes:enabled: trueelasticsearch.cluster.pending_tasks:enabled: trueelasticsearch.cluster.shards:enabled: trueelasticsearch.cluster.state_update.time:enabled: trueelasticsearch.index.documents:enabled: trueelasticsearch.index.operations.merge.current:enabled: trueelasticsearch.index.operations.time:enabled: trueelasticsearch.node.cache.count:enabled: trueelasticsearch.node.cache.evictions:enabled: trueelasticsearch.node.cache.memory.usage:enabled: trueelasticsearch.node.shards.size:enabled: trueelasticsearch.node.cluster.io:enabled: trueelasticsearch.node.documents:enabled: trueelasticsearch.node.disk.io.read:enabled: trueelasticsearch.node.disk.io.write:enabled: trueelasticsearch.node.fs.disk.available:enabled: trueelasticsearch.node.fs.disk.total:enabled: trueelasticsearch.node.http.connections:enabled: trueelasticsearch.node.ingest.documents.current:enabled: trueelasticsearch.node.ingest.operations.failed:enabled: trueelasticsearch.node.open_files:enabled: trueelasticsearch.node.operations.completed:enabled: trueelasticsearch.node.operations.current:enabled: trueelasticsearch.node.operations.get.completed:enabled: trueelasticsearch.node.operations.time:enabled: trueelasticsearch.node.shards.reserved.size:enabled: trueelasticsearch.index.shards.size:enabled: trueelasticsearch.os.cpu.load_avg.1m:enabled: trueelasticsearch.os.cpu.load_avg.5m:enabled: trueelasticsearch.os.cpu.load_avg.15m:enabled: trueelasticsearch.os.memory:enabled: truejvm.gc.collections.count:enabled: truejvm.gc.collections.elapsed:enabled: truejvm.memory.heap.max:enabled: truejvm.memory.heap.used:enabled: truejvm.memory.heap.utilization:enabled: truejvm.threads.count:enabled: trueelasticsearch.index.segments.count:enabled: trueelasticsearch.index.operations.completed:enabled: trueelasticsearch.node.script.cache_evictions:enabled: falseelasticsearch.node.cluster.connections:enabled: falseelasticsearch.node.pipeline.ingest.documents.preprocessed:enabled: falseelasticsearch.node.thread_pool.tasks.queued:enabled: falseelasticsearch.cluster.published_states.full:enabled: falsejvm.memory.pool.max:enabled: falseelasticsearch.node.script.compilation_limit_triggered:enabled: falseelasticsearch.node.shards.data_set.size:enabled: falseelasticsearch.node.pipeline.ingest.documents.current:enabled: falseelasticsearch.cluster.state_update.count:enabled: falseelasticsearch.node.fs.disk.free:enabled: falsejvm.memory.nonheap.used:enabled: falsejvm.memory.pool.used:enabled: falseelasticsearch.node.translog.size:enabled: falseelasticsearch.node.thread_pool.threads:enabled: falseelasticsearch.cluster.state_queue:enabled: falseelasticsearch.node.translog.operations:enabled: falseelasticsearch.memory.indexing_pressure:enabled: falseelasticsearch.node.ingest.documents:enabled: falsejvm.classes.loaded:enabled: falsejvm.memory.heap.committed:enabled: falseelasticsearch.breaker.memory.limit:enabled: falseelasticsearch.indexing_pressure.memory.total.replica_rejections:enabled: falseelasticsearch.breaker.memory.estimated:enabled: falseelasticsearch.cluster.published_states.differences:enabled: falsejvm.memory.nonheap.committed:enabled: falseelasticsearch.node.translog.uncommitted.size:enabled: falseelasticsearch.node.script.compilations:enabled: falseelasticsearch.node.pipeline.ingest.operations.failed:enabled: falseelasticsearch.indexing_pressure.memory.limit:enabled: falseelasticsearch.breaker.tripped:enabled: falseelasticsearch.indexing_pressure.memory.total.primary_rejections:enabled: falseelasticsearch.node.thread_pool.tasks.finished:enabled: falseprocessors:memory_limiter:check_interval: 60slimit_mib: ${env:NEW_RELIC_MEMORY_LIMIT_MIB:-100}cumulativetodelta: {}resource/cluster_name_override:attributes:- key: elasticsearch.cluster.namevalue: "<elasticsearch-cluster-name>"action: upsertresourcedetection:detectors: [ system ]system:resource_attributes:host.name:enabled: truehost.id:enabled: trueos.type:enabled: truebatch:timeout: 10ssend_batch_size: 1024attributes/cardinality_reduction:actions:- key: process.pidaction: delete- key: process.parent_pidaction: deletetransform/metadata_nullify:metric_statements:- context: metricstatements:- set(description, "")- set(unit, "")exporters:otlphttp:endpoint: ${env:NEWRELIC_OTLP_ENDPOINT}headers:api-key: ${env:NEWRELIC_LICENSE_KEY}service:pipelines:metrics/elasticsearch:receivers: [elasticsearch]processors: [memory_limiter, resourcedetection, resource/cluster_name_override, attributes/cardinality_reduction, cumulativetodelta, transform/metadata_nullify, batch]exporters: [otlphttp](선택 사항) 인증 및 SSL을 사용하는 보안 Elasticsearch 의 경우 수신자 설정을 수정하십시오.
receivers:elasticsearch:endpoint: "https://localhost:9200"username: "your_elasticsearch_username"password: "your_elasticsearch_password"tls:ca_file: "/etc/elasticsearch/certs/http_ca.crt"insecure_skip_verify: falsecollection_interval: 15s(선택 사항) 호스트 메트릭을 수집하려면 hostmetrics 수신기를 추가하세요.
receivers:hostmetrics:collection_interval: 60sscrapers:cpu:metrics:system.cpu.utilization: {enabled: true}system.cpu.time: {enabled: true}load:metrics:system.cpu.load_average.1m: {enabled: true}system.cpu.load_average.5m: {enabled: true}system.cpu.load_average.15m: {enabled: true}memory:metrics:system.memory.usage: {enabled: true}system.memory.utilization: {enabled: true}disk:metrics:system.disk.io: {enabled: true}system.disk.operations: {enabled: true}filesystem:metrics:system.filesystem.usage: {enabled: true}system.filesystem.utilization: {enabled: true}network:metrics:system.network.io: {enabled: true}system.network.packets: {enabled: true}process:metrics:process.cpu.utilization:enabled: true그리고 서비스 파이프라인에 다음을 추가하세요:
service:pipelines:metrics/host:receivers: [hostmetrics]processors: [memory_limiter, resourcedetection, batch]exporters: [otlphttp](선택 사항) Elasticsearch 로그를 수집하려면 filelog 수신기를 추가하세요. 수집기 서비스(otelcol-contrib)를 실행하는 사용자에게 Elasticsearch 로그 파일에 대한 읽기 권한이 있는지 확인하십시오.
Elasticsearch를 Linux(호스트)에서 실행하는 경우:
receivers:filelog:include:- /var/log/elasticsearch/elasticsearch.log- /var/log/elasticsearch/*.log도커에서 Elasticsearch 실행하는 경우:
receivers:filelog:include:- /var/lib/docker/containers/*/*.logoperators:- type: movefrom: attributes.logto: body그리고 서비스 파이프라인에 다음을 추가하세요:
service:pipelines:logs:receivers: [filelog]processors: [resource/cluster_name_override]exporters: [otlphttp](선택 사항) 메트릭에 사용자 지정 메타데이터 태그를 추가하려면
resource/static_override프로세서를 사용하세요.processors:resource/static_override:attributes:- key: envvalue: "production"action: upsertservice:pipelines:metrics/elasticsearch:receivers: [elasticsearch]processors: [memory_limiter, resourcedetection, resource/cluster_name_override, resource/static_override, attributes/cardinality_reduction, cumulativetodelta, transform/metadata_nullify, batch]exporters: [otlphttp]설정 파일을 저장합니다.
환경 변수를 설정하세요:
systemd 오버라이드 디렉터리를 생성합니다.
bash$sudo mkdir -p /etc/systemd/system/otelcol-contrib.service.d환경 설정 파일을 생성합니다.
bash$cat <<EOF | sudo tee /etc/systemd/system/otelcol-contrib.service.d/environment.conf$[Service]$Environment="NEWRELIC_OTLP_ENDPOINT=https://otlp.nr-data.net:4318"$Environment="NEWRELIC_LICENSE_KEY=YOUR_LICENSE_KEY_HERE"$Environment="NEW_RELIC_MEMORY_LIMIT_MIB=100"$EOF설정값을 사용자 값으로 업데이트하세요:
https://otlp.nr-data.net:4318해당 지역의 엔드포인트로 바꾸세요.YOUR_LICENSE_KEY_HERE실제 뉴웰 클러스터 키로 바꾸세요.100수집기에 사용할 원하는 메모리 제한(MiB 단위)으로 바꾸십시오(기본값: 100MiB). 사용 환경의 필요에 따라 조정하십시오.
변경 사항을 적용하려면 OTel Collector Contrib를 다시 시작하십시오.
bash$sudo systemctl daemon-reload$sudo systemctl restart otelcol-contrib.service
데이터 수집 확인
OTel Collector Contrib이 오류 없이 실행 중이며 데이터를 수집하고 있는지 확인하십시오.
수집기 서비스 상태를 확인하세요:
bash$sudo systemctl status otelcol-contrib.service수집기 로그를 모니터링하여 오류가 있는지 확인하십시오.
bash$sudo journalctl -u otelcol-contrib.service -fElasticsearch 및 뉴럴릭과의 성공적인 연결을 찾아보세요. 오류가 발생하는 경우 문제 해결, 해결 가이드를 참조하세요.
팁
APM과 Elasticsearch 연동: APM 애플리케이션과 Elasticsearch 클러스터를 연결하려면 APM 메트릭에 리소스 속성 es.cluster.name="your-cluster-name" 포함하세요. 이를 통해 서비스 간 가시성과 문제 해결 속도가 빨라지고 뉴렐릭 내에서 문제가 해결됩니다.
Elasticsearch 데이터를 확인하세요
수집기가 실행되고 데이터를 전송하면 Elasticsearch 지표를 탐색하고, 사용자 정의 쿼리를 생성하고, 뉴렐릭에서 모니터링 대시보드를 설정할 수 있습니다.
데이터 액세스, NRQL 작성, 그리고 알림 구성에 대한 자세한 내용은 Elasticsearch 데이터 찾기 및 검색을 참조하세요.
문제점 해결
설치 중에 문제가 발생하거나 뉴렐릭에 데이터가 표시되지 않는 경우 일반적인 문제에 대한 단계별 해결 방법에 대한 포괄적인 문제 해결, 해결 가이드를 참조하세요.