웹 서버
Nginx
설치
Nginx는 다음의 공식 문서를 참고하여 설치합니다.
https://www.nginx.com/resources/wiki/start/topics/tutorials/install/
데이터 수집을 위한 추가 작업
Nginx 설치 후 Nginx의 데이터를 수집하기 위해 추가 작업이 필요합니다.
OpenTelemetry Module 설치
OpenTelemetry을 설치합니다.
|
OpenTelemetry 설치 파일을 다운로드하고, /opt 디렉터리에 설치 파일의 압축을 해제합니다.
$ cd /opt
$ wget https://github.com/open-telemetry/opentelemetry-cpp-contrib/releases/ download/webserver%2Fv$(version)/opentelemetry-webserver-sdk-x64-linux.tgz.zip
$ unzip opentelemetry-webserver-sdk-x64-linux.tgz.zip
$ tar -xvzf opentelemetry-webserver-sdk-x64-linux.tgz
$ cd opentelemetry-webserver-sdk
$ ./install.sh
항목 | 설명 |
---|---|
$(version) |
설치할 OpenTelemetry의 버전입니다. (예: 1.0.2) |
OpenTelemetry 설치 파일 압축 해제 후 생성되는 디렉터리 구조는 다음과 같습니다.
/agent-home/opentelemetry-webserver-sdk
|-- VERSION.txt
|-- WebServerModule
| |-- Apache
| | |-- libmod_apache_otel.so
| | |-- libmod_apache_otel22.so
| | |-- libopentelemetry_webserver_sdk.so
| |-- Nginx
| | |-- 1.22.0
| | | |-- ngx_http_opentelemetry_module.so
| | |-- 1.23.0
| | | |-- ngx_http_opentelemetry_module.so
| | |-- 1.23.1
| | | |-- ngx_http_opentelemetry_module.so
|-- conf
| |-- appdynamics_sdk_log4cxx.xml
| |-- appdynamics_sdk_log4cxx.xml.template
|-- install.sh
|-- logs
|-- sdk_lib
| |-- lib
| | |-- libopentelemetry_common.so
| | |-- libopentelemetry_exporter_ostream_span.so
| | |-- libopentelemetry_exporter_otlp_grpc.so
| | |-- libopentelemetry_otlp_recordable.so
| | |-- libopentelemetry_resources.so
| | |-- libopentelemetry_trace.so
| | |-- libopentelemetry_webserver_sdk.so
LD_LIBRARY_PATH 설정
LD_LIBRARY_PATH를 설정합니다. 이때 아래 두 가지 방법 중 하나를 선택하여 설정이 가능합니다.
-
[방법 1]
환경 변수를 설정합니다.
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/opentelemetry-webserver-sdk/sdk_lib/lib
만약 'cannot open shared object file: No such file or directory' 에러가 발생 시 [방법 2]로 진행합니다.
-
[방법 2]
conf 파일을 직접 추가합니다.
-
/etc/ld.so.conf.d 디렉터리 하위에 opentelemetry-webserver-sdk.conf 파일을 생성합니다.
-
/opt/opentelemetry-webserver-sdk/sdk_lib/lib를 복사한 후 붙여넣고 저장합니다.
-
ldconfig 명령을 수행하여 설정을 적용합니다.
-
Nginx에 OpenTelemetry Module 추가
Nginx 설정 파일에 module 위치와 conf 설정을 추가합니다.
-
nginx.conf 파일
${NGINX_HOME}/conf/nginx.confworker_processes 1; # module 위치 load_module /opt/opentelemetry-webserver-sdk/WebServerModule/Nginx/${nginx_version}/ngx_http_opentelemetry_module.so; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } # exporter 연동을 위한 stub_status 오픈 location /metrics { stub_status; allow all; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } # conf 설정 include /opt/opentelemetry_module.conf; }
-
opentelemetry_module.conf 파일
/opt에 opentelemetry_module.conf를 생성합니다.
NginxModuleEnabled ON; #NginxModule Otel Exporter details NginxModuleOtelSpanExporter otlp; NginxModuleOtelExporterEndpoint ${MASTER_IP}:4317; # SSL Certificates #NginxModuleOtelSslEnabled ON #NginxModuleOtelSslCertificatePath #NginxModuleOtelSpanProcessor Batch NginxModuleOtelSampler AlwaysOn; #NginxModuleOtelMaxQueueSize 1024 #NginxModuleOtelScheduledDelayMillis 3000 #NginxModuleOtelExportTimeoutMillis 30000 #NginxModuleOtelMaxExportBatchSize 1024 NginxModuleServiceName nginx; NginxModuleServiceNamespace nginx; NginxModuleServiceInstanceId ${HOSTNAME}; NginxModuleResolveBackends ON; NginxModuleTraceAsError ON; #NginxModuleSegmentType LAST; #NginxModuleSegmentParameter 1;
항목 설명 ${MASTER_IP}
otel-collector가 설치된 서버의 IP 주소입니다.
${HOSTNAME}
모니터링할 인스턴스의 ID입니다.
Nginx Exporter 설치
Nginx Exporter를 설치합니다.
-
Nginx Exporter 설치 파일을 사용 환경에 맞는 버전으로 다운로드한 후 압축을 해제합니다.
$ wget https://github.com/nginxinc/nginx-prometheus-exporter/releases/ download/v0.11.0/nginx-prometheus-exporter_0.11.0_linux_$(system).tar.gz $ tar xvfz nginx-prometheus-exporter_0.11.0_linux*.tar.gz
항목 설명 $(system)
서버의 아키텍처입니다.
-
AMD64: amd64
-
ARM64: arm64
-
i386: 386
-
-
Nginx Exporter를 실행합니다.
$ nohup ./nginx-prometheus-exporter -nginx.scrape-uri="http://${NGINX_SERVER_IP}:${NGINX_PORT}/metrics"
항목 설명 ${NGINX_EXPORTER_SERVER_IP}
Nginx Exporter 서버의 IP 주소입니다.
${NGINX_EXPORTER_PORT}
Nginx Exporter 서버의 포트 번호입니다.
Nginx Exporter와 Nginx가 정상적으로 연동 및 실행된 경우 ${NGINX_EXPORTER_SERVER_IP}:${NGINX_EXPORTER_PORT}/metrics로 요청을 보냈을 때 수집된 메트릭 정보를 확인할 수 있습니다. |
WAS 연동
모니터링 대상인 Nginx와 WAS를 연결하여 하나의 트레이스로 볼 수 있습니다.
-
Nginx가 설치된 경로에서 nginx.conf 파일의 location 항목에 코드를 추가합니다.
location / { root html; index index.html index.htm; # 아래 코드 추가 proxy_pass http://${WAS-IP}:${WAS-PORT}; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }
항목 설명 ${WAS-IP}
연결할 WAS의 IP 주소입니다.
${WAS-PORT}
연결할 WAS의 포트 번호입니다.
-
Nginx를 재기동합니다.
Apache
데이터 수집을 위한 추가 작업
Apache 설치 후 Apache의 데이터를 수집하기 위해 추가 작업이 필요합니다.
Apache 설치 방법에 따라 파일 이름과 위치가 달라질 수 있습니다. 본 내용은 데비안 계열 운영체제를 기준으로 설명합니다. |
OpenTelemetry Module 설치
OpenTelemetry을 설치합니다.
|
OpenTelemetry 설치 파일을 다운로드하고, /opt 디렉터리에 설치 파일의 압축을 해제합니다.
$ cd /opt
$ wget https://github.com/open-telemetry/opentelemetry-cpp-contrib/releases/ download/webserver%2Fv$(version)/opentelemetry-webserver-sdk-x64-linux.tgz.zip
$ unzip opentelemetry-webserver-sdk-x64-linux.tgz.zip
$ tar -xvzf opentelemetry-webserver-sdk-x64-linux.tgz
$ cd opentelemetry-webserver-sdk
$ ./install.sh
항목 | 설명 |
---|---|
$(version) |
설치할 OpenTelemetry의 버전 (예: 1.0.2) |
OpenTelemetry 설치 파일 압축 해제 후 생성되는 디렉터리 구조는 다음과 같습니다.
/agent-home/opentelemetry-webserver-sdk
|-- VERSION.txt
|-- WebServerModule
| |-- Apache
| | |-- libmod_apache_otel.so
| | |-- libmod_apache_otel22.so
| | |-- libopentelemetry_webserver_sdk.so
| |-- Nginx
| | |-- 1.22.0
| | | |-- ngx_http_opentelemetry_module.so
| | |-- 1.23.0
| | | |-- ngx_http_opentelemetry_module.so
| | |-- 1.23.1
| | | |-- ngx_http_opentelemetry_module.so
|-- conf
| |-- appdynamics_sdk_log4cxx.xml
| |-- appdynamics_sdk_log4cxx.xml.template
|-- install.sh
|-- logs
|-- sdk_lib
| |-- lib
| | |-- libopentelemetry_common.so
| | |-- libopentelemetry_exporter_ostream_span.so
| | |-- libopentelemetry_exporter_otlp_grpc.so
| | |-- libopentelemetry_otlp_recordable.so
| | |-- libopentelemetry_resources.so
| | |-- libopentelemetry_trace.so
| | |-- libopentelemetry_webserver_sdk.so
LD_LIBRARY_PATH 설정
LD_LIBRARY_PATH를 설정합니다. 이때 아래 두 가지 방법 중 하나를 선택하여 설정이 가능합니다.
-
[방법 1]
환경 변수를 설정합니다.
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/opentelemetry-webserver-sdk/sdk_lib/lib
만약 'cannot open shared object file: No such file or directory' 에러가 발생 시 [방법 2]로 진행합니다.
-
[방법 2]
conf 파일을 직접 추가합니다.
-
/etc/ld.so.conf.d 디렉터리 하위에 opentelemetry-webserver-sdk.conf 파일을 생성합니다.
-
/opt/opentelemetry-webserver-sdk/sdk_lib/lib를 복사한 후 붙여넣고 저장합니다.
-
ldconfig 명령을 수행하여 설정을 적용합니다.
-
apache2.conf 파일 설정
${APACHE_HOME}/apache2.conf 파일에 아래의 내용을 추가합니다.
-
'status_module' 모듈을 'modules/mod_status.so’에서 로드
-
'opentelemetry_module.conf' 설정 파일을 포함
-
'httpd-info.conf' 설정 파일을 포함
다음은 apache2.conf 파일의 설정 예시입니다.
... 생략
LoadModule status_module modules/mod_status.so
Include opentelemetry_module.conf
Include httpd-info.conf
Apache에 OpenTelemetry Module 추가
${APACHE_HOME}/opentelemetry_module.conf 파일을 생성합니다.
다음은 opentelemetry_module.conf 파일의 설정 예시입니다.
LoadFile /opt/opentelemetry-webserver-sdk/sdk_lib/lib/libopentelemetry_common.so
LoadFile /opt/opentelemetry-webserver-sdk/sdk_lib/lib/libopentelemetry_resources.so
LoadFile /opt/opentelemetry-webserver-sdk/sdk_lib/lib/libopentelemetry_trace.so
LoadFile /opt/opentelemetry-webserver-sdk/sdk_lib/lib/libopentelemetry_otlp_recordable.so
LoadFile /opt/opentelemetry-webserver-sdk/sdk_lib/lib/libopentelemetry_exporter_ostream_span.so
LoadFile /opt/opentelemetry-webserver-sdk/sdk_lib/lib/libopentelemetry_exporter_otlp_grpc.so
#Load the ApacheModule SDK
LoadFile /opt/opentelemetry-webserver-sdk/sdk_lib/lib/libopentelemetry_webserver_sdk.so
#Load the Apache Module. In this example for Apache 2.4
LoadModule otel_apache_module /opt/opentelemetry-webserver-sdk/WebServerModule/Apache/libmod_apache_otel.so
ApacheModuleEnabled ON
#ApacheModule Otel Exporter details
ApacheModuleOtelSpanExporter otlp
ApacheModuleOtelExporterEndpoint ${MASTER_IP}:4317;
# SSL Certificates
#ApacheModuleOtelSslEnabled ON
#ApacheModuleOtelSslCertificatePath
#ApacheModuleOtelSpanProcessor Batch
#ApacheModuleOtelSampler AlwaysOn
#ApacheModuleOtelMaxQueueSize 1024
#ApacheModuleOtelScheduledDelayMillis 3000
#ApacheModuleOtelExportTimeoutMillis 30000
#ApacheModuleOtelMaxExportBatchSize 1024
ApacheModuleServiceName apache
ApacheModuleServiceNamespace apache
ApacheModuleServiceInstanceId ${HOSTNAME};
ApacheModuleResolveBackends ON
ApacheModuleTraceAsError ON
#ApacheModuleWebserverContext DemoService DemoServiceNamespace DemoInstanceId
#ApacheModuleSegmentType custom
#ApacheModuleSegmentParameter 15,1,6,7
항목 | 설명 |
---|---|
${MASTER_IP} |
otel-collector가 설치된 서버의 IP 주소입니다. |
${HOSTNAME} |
모니터링할 인스턴스의 ID입니다. |
httpd-info.conf 파일 설정
${APACHE_HOME}/httpd-info.conf 파일을 생성합니다.
다음은 httpd-info.conf 파일의 설정 예시입니다.
# Change the ".example.com" to match your domain to enable.
<Location /server-status>
SetHandler server-status
# Require host .example.com
# Require ip 127
Require all granted
</Location>
#
# ExtendedStatus controls whether Apache will generate "full" status
# information (ExtendedStatus On) or just basic information (ExtendedStatus
# Off) when the "server-status" handler is called. The default is Off.
#
ExtendedStatus On
Apache Exporter 설치
Apache Exporter를 설치합니다.
-
Apache Exporter 설치 파일을 사용 환경에 맞는 버전으로 다운로드한 후 압축을 해제합니다.
$ wget https://github.com/Lusitaniae/apache_exporter/releases/download/v0.11.0/apache_exporter-0.11.0.linux-$(system).tar.gz $ tar xvfz apache_exporter-0.11.0.linux*.tar.gz
항목 설명 $(system)
서버의 아키텍처입니다.
-
AMD64: amd64
-
ARM64: arm64
-
i386: 386
-
-
Apache Exporter를 실행합니다.
$ ./apache_exporter --scrape_uri="http://${APACHE_SERVER_IP}:${APACHE_PORT}/server-status/?auto"
항목 설명 ${APACHE_EXPORTER_SERVER_IP}
Apache Exporter 서버의 IP 주소입니다.
${APACHE_EXPORTER_PORT}
Apache Exporter 서버의 포트 번호입니다.
Apache Exporter가 정상적으로 실행된 경우 ${APACHE_EXPORTER_SERVER_IP}:${APACHE_EXPORTER_PORT}/metrics로 요청을 보냈을 때 수집된 메트릭 정보를 확인할 수 있습니다. |
WAS 연동
모니터링 대상인 Apache와 WAS를 연결하여 하나의 트레이스로 볼 수 있습니다.
Apache 설치 방법에 따라 파일 이름과 위치가 달라질 수 있습니다. 본 내용은 데비안 계열 운영체제를 기준으로 설명합니다. |
mod_jk.so 설치
Apache와 WAS의 연동을 위해 mod_jk.so 모듈을 설치합니다.
-
gcc, gawk, libaprutil1-dev, perl 패키지를 설치합니다.
-
Tomcat Connectors(mod_jk)를 다운로드하고 /opt 디렉터리에 압축 해제합니다.
$ cd /opt $ wget https://dlcdn.apache.org/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.49-src.tar.gz $ tar -xvzf tomcat-connectors-1.2.49-src.tar.gz
-
압축 해제가 완료되면 native 디렉터리로 이동한 후 configure 명령어를 통해 apxs 경로를 포함한 make 파일을 생성합니다. 만약 apxs가 없을 경우 따로 설치합니다.
$ cd /opt/tomcat-connectors-1.2.49-src/native $ ./configure --with-apxs=${APACHE_HOME}/bin/apxs
-
make 명령 실행 후 make install 명령을 실행합니다.
$ make && make install
-
/usr/lib/apache2/modules에 mod_jk.so가 설치되었는지 확인합니다. 만약 해당 경로에 없으면 find 명령어로 검색한 후 설치되지 않았다면 아래 코드를 통해 설치합니다.
$ apt-get install libapache2-mod-jk
연동 설정
Apache와 WAS를 연동하기 위한 설정을 적용합니다.
-
${APACHE_HOME}/mod_jk.conf 파일을 생성하고, 아래 코드를 추가합니다.
JkWorkersFile conf/workers.properties JkLogFile logs/mod_jk.log JkLogLevel info JkLogStampFormat "[%y %m %d %H:%M:%S]" JkMount /* worker1
-
${APACHE_HOME}/workers.properties 파일을 생성하고, 아래 코드를 추가합니다.
worker.list=worker1 worker.worker1.port=8009 worker.worker1.host={Tomcat의 호스트 IP} worker.worker1.type=ajp13
-
${APACHE_HOME}/apache2.conf 파일에 아래 코드를 추가합니다.
LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so Include httpd-jk.conf
단, 코드의 순서에 따라 트레이스가 정상적으로 수집되지 않을 수도 있으니 아래와 같이 순서를 지키는 것을 권장합니다.
LoadModule status_module modules/mod_status.so LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so Include opentelemetry_module.conf Include httpd-info.conf Include httpd-jk.conf
-
${APACHE_HOME}/sites-enabled/000-default.conf 파일에 아래 코드를 추가합니다.
<VirtualHost *:80> .... # 추가 JkMount /* tomcat1 .... </VirtualHost>
-
Apache 서버를 재기동합니다.