Prerequisite
Logstash 서버는 Rocky9으로 진행하였습니다.
OpenSearch는 기본 옵션들로 생성하였습니다.
-
OpenSearch의 접속 아이디 패스워드는 Secrets Manger로 환경변수 처리 했습니다.
-
key / value
username / id
password / password
-
Process
-
Logtash 설치
sudo yum update -y sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch sudo vi /etc/yum.repos.d/logstash.repo [logstash-9.x] name=Elastic repository for 9.x packages baseurl=https://artifacts.elastic.co/packages/9.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md 저장 sudo yum install logstash
-
OpenSearch 플러그인 설치
sudo /usr/share/logstash/bin/logstash-plugin install logstash-output-opensearch
-
OpenSearch 접속 아이디 패스워드 환경변수 처리
sudo mkdir /opt/logstash/bin sudo vi /opt/logstash/bin #!/bin/bash # 로그 설정 LOG_FILE="/var/log/logstash-startup.log" echo "$(date): Starting Logstash with Secrets Manager credentials" >> $LOG_FILE # Secrets Manager에서 자격 증명 가져오기 SECRET_JSON=$(aws secretsmanager get-secret-value \ --secret-id "Secrets Manger`s Name" \ --region ap-northeast-2 \ --query SecretString \ --output text 2>> $LOG_FILE) if [ $? -ne 0 ]; then echo "$(date): Failed to retrieve secrets from Secrets Manager" >> $LOG_FILE exit 1 fi # JSON에서 값 추출 export OPENSEARCH_USERNAME=$(echo $SECRET_JSON | jq -r '.username') export OPENSEARCH_PASSWORD=$(echo $SECRET_JSON | jq -r '.password') echo "$(date): Credentials retrieved successfully" >> $LOG_FILE # Logstash 시작 exec /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/opensearch.conf/var/log/logstash-startup.log 생성 sudo touch /var/log/logstash-startup.log sudo chown logstash:logstash /var/log/logstash-startup.log-
시스템 서비스 등록
[Unit] Description=Logstash with Secrets Manager Documentation=https://www.elastic.co/guide/en/logstash/current/index.html Wants=network-online.target After=network-online.target RequiresMountsFor=/var/log [Service] Type=exec User=logstash Group=logstash Environment=HOME=/usr/share/logstash Environment=LS_SETTINGS_DIR=/etc/logstash Environment=LS_OPTS="--path.settings=${LS_SETTINGS_DIR}" ExecStart=/opt/logstash/bin/start-logstash.sh Restart=always RestartSec=10 StandardOutput=journal StandardError=journal SyslogIdentifier=logstash KillMode=mixed KillSignal=SIGTERM TimeoutStopSec=30 [Install] WantedBy=multi-user.target
-
opensearch.conf 생성
sudo vi /etc/logstash/conf.d/opensearch.conf input { # 파일에서 로그 읽기 file { path => "/var/log/application/*.log" start_position => "beginning" sincedb_path => "/dev/null" } # Beats에서 로그 수신 beats { port => 5044 } # Syslog 수신 syslog { port => 5514 } } filter { # JSON 파싱 if [message] =~ /^\{.*\}$/ { json { source => "message" } } # 타임스탬프 파싱 date { match => [ "timestamp", "yyyy-MM-dd HH:mm:ss" ] } # Grok 패턴 (Apache 로그 예시) grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } output { # AWS OpenSearch 출력 opensearch { hosts => ["OpenSearch의 도메인 엔드포인트 기입:443"] index => "logstash-logs-%{+YYYY.MM.dd}" # 환경변수 처리 user => "${OPENSEARCH_USERNAME}" password => "${OPENSEARCH_PASSWORD}" # SSL 설정 ssl => true ssl_certificate_verification => true # 템플릿 설정 template_name => "logstash-template" template => "/etc/logstash/templates/logstash-template.json" template_overwrite => true } # 디버깅용 stdout stdout { codec => rubydebug } }
-
logstash-template.json 생성
sudo mkdir /etc/logstash/templates sudo vi logstash-template.json { "index_patterns": ["logstash-*"], "template": { "settings": { "number_of_shards": 1, "number_of_replicas": 0, "index.refresh_interval": "5s" }, "mappings": { "properties": { "@timestamp": { "type": "date" }, "level": { "type": "keyword" }, "message": { "type": "text", "analyzer": "standard" }, "host": { "type": "keyword" } } } } }
-
Logstash 실행
sudo systemctl start logstash sudo systemctl enable logstash sudo systemctl status logstash
-
Log 생성
sudo mkdir -p /var/log/application echo '{"timestamp":"2025-09-05 07:20:00","level":"INFO","message":"LogStash 연동 테스트 메시지"}' | sudo tee -a /var/log/application/test.log echo "2025-09-05 07:20:00 [ERROR] 일반 로그 메시지 테스트" | sudo tee -a /var/log/application/app.log echo '192.168.1.1 - - [05/Sep/2025:07:20:00 +0000] "GET /api/test HTTP/1.1" 200 1234 "https://example.com" "Mozilla/5.0"' | sudo tee -a /var/log/application/access.log
-
OpenSearch 대시보드 접근
AWS Console로 OpenSearch 접근 OpenSearch 대시보드 URL 클릭
- Indexs 확인
좌측 상단의 줄3개의 메뉴를 클릭 후 Management에서의 Index Management 클릭 왼쪽에서의 Indexs 클릭 logstash의 로그가 저장된 것을 확인할 수 있음
- Dashboards Management
- Index patterns
- Create Index pattern
- Index pattern name (입력 후 Next step 클릭)
- logstash-logs-*
- Time field (선택 후 생성)
- @timestamp
- Index pattern name (입력 후 Next step 클릭)
- Create Index pattern
- Index patterns
-
Discover에서 로그 확인
좌측 메뉴에서 OpenSearch Dashboards 부분의 Discover 선택하면 로그 확인 가능- 상단 부분의 Add filter를 통해서 원하는 값만 검색 가능하며 Last 1 day 부분을 클릭하면 초,분,시간 등등 선택 가능
댓글
댓글 0개
댓글을 남기려면 로그인하세요.