Rsyslog을 통한 Cisco 네트워크 장비 로그 수집 설정
1. Rsyslog 서비스 설치 및 구성
Cisco 장비에서 발생하는 시스템 로그를 중앙에서 수집하기 위해 Linux 서버에 rsyslog를 설치하고, UDP/TCP 기반의 syslog 수신 환경을 구성한다.
yum install -y rsyslog
다음은 /etc/rsyslog.conf 파일의 핵심 설정 내용이다:
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
# 기본 시스템 로그 라우팅
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
local7.* /var/log/boot.log
# 사용자 정의 로그 포맷 및 저장 경로 정의
$template LogFormatNoTimestamp,"%FROMHOST-IP%: %msg:2:$%\n"
$template CiscoLogPath,"/net-log/cisco/%FROMHOST-IP%.log"
# local4 우선도의 모든 로그를 지정된 형식으로 저장
local4.* ?CiscoLogPath;LogFormatNoTimestamp
설정 완료 후 rsyslog 서비스 재시작:
systemctl restart rsyslog.service
2. Cisco 장비 측 설정 (요약)
네트워크 장비에서는 아래와 유사한 명령어로 로그 전송 대상을 지정한다:
logging 192.169.5.128
logging trap informational
실제 설정은 네트워크 운영팀에서 수행하며, 목적지 IP는 rsyslog 서버의 주소로 지정해야 한다.
3. 로그 수집 확인
로그가 정상적으로 수신되고 있는지 확인:
tree /net-log/
/net-log/
└── cisco
└── 192.169.5.249.log
tail -1 /net-log/cisco/192.169.5.249.log
001068: Jun 18 12:29:49: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/12, changed state to down
Filebeat을 통한 로그 전달 파이프라인 구성
1. Filebeat 설정 파일 작성
수집된 로그를 Kafka로 전달하기 위해 Filebeat를 사용하여 로그 파일을 모니터링한다.
filebeat.inputs:
- type: log
enabled: true
paths:
- /net-log/cisco/*.log
fields_under_root: true
fields:
type: net-cisco
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
name: net-log-collector
processors:
- add_host_metadata: ~
- drop_fields:
fields: ["sort", "beat", "input_type", "offset", "source", "agent"]
output.kafka:
enabled: true
hosts: ["172.16.160.121:9092", "172.16.160.123:9092"]
topic: '%{[type]}'
2. Systemd를 이용한 서비스 등록
Filebeat를 백그라운드 서비스로 실행하기 위한 unit 파일 생성:
[Unit]
Description=Filebeat Log Shipper
After=network.target
[Service]
User=root
Group=root
ExecStart=/usr/local/filebeat/filebeat \
-c /usr/local/filebeat/filebeat.yml \
--path.logs /usr/local/filebeat/logs
Restart=always
[Install]
WantedBy=multi-user.target
서비스 등록 및 시작:
systemctl daemon-reload
systemctl enable filebeat
systemctl restart filebeat
3. Kafka 전달 상태 검증
Kafka 클러스터에서 토픽 생성 여부 확인:
/usr/local/kafka/bin/kafka-topics.sh --list --zookeeper 172.16.160.121:2181
# 출력 예상: net-cisco
토픽 데이터 소비 테스트:
/usr/local/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server 172.16.160.121:9092 \
--topic net-cisco --from-beginning
Logstash를 통한 로그 파싱 및 Elasticsearch 적재
Logstash는 Kafka에서 메시지를 소비하여 구조화된 형태로 변환한 후 Elasticsearch로 전송한다.
input {
kafka {
bootstrap_servers => "172.16.160.121:9092,172.16.160.123:9092"
topics => ["net-cisco"]
group_id => "logstash-consumer-group"
decorate_events => true
type => "net-cisco"
codec => "json"
}
}
filter {
# 로그 메시지를 콜론 기준으로 분할
mutate {
split => ["message", ": "]
add_field => {
"client_ip" => "%{[message][0]}"
"sequence" => "%{[message][1]}"
"timestamp_raw" => "%{[message][2]}"
"event_code" => "%{[message][3]}"
"log_message" => "%{[message][4]}"
}
}
# 원본 메시지 필드 제거
mutate { remove_field => ["message"] }
# 날짜 형식 변환
date {
match => ["timestamp_raw", "MMM dd HH:mm:ss"]
target => "@timestamp"
timezone => "Asia/Seoul"
}
# 불필요 필드 정리
mutate { remove_field => ["timestamp_raw"] }
}
output {
if [type] == "net-cisco" {
elasticsearch {
hosts => ["172.160.125:9200", "172.160.126:9200", "172.160.127:9200"]
index => "net-cisco-%{+YYYY.MM.dd}"
document_type => "_doc"
}
}
}
Logstash 구성 검증 및 실행:
bin/logstash -f net-cisco.conf --config.test_and_exit
nohup bin/logstash -f net-cisco.conf > logs/logstash_cisco.log &
Kibana에서 로그 시각화
Elasticsearch에 데이터가 적재되면 Kibana에서 다음과 같은 절차로 인덱스 패턴을 생성한다:
- Management > Stack Management > Kibana > Index Patterns 이동
- 인덱스 이름 입력:
net-cisco-* - 타임 기반 필드 선택:
@timestamp - 생성 후 Discover 메뉴에서 실시간 로그 조회 가능
주요 필드 예시:
client_ip: 로그 발생 장비 IPevent_code: 시스로그 이벤트 코드log_message: 상세 이벤트 설명
운영 시 고려사항
- timestamp 및 type 필드: Filebeat에서 삭제가 불가능하므로 filter 단계에서 처리 필요
- 파일 수정 방식: 테스트용 로그 추가 시
echo사용 권장.vim사용 시 inode 변경으로 전체 재전송 발생 - Filebeat 로깅 옵션:
-e와--path.logs는 동시에 사용 불가 - Kafka 토픽 자동 생성: 비활성화된 경우 새로운 로그 유형마다 수동으로 토픽 생성 필요
- Kibana 인덱스 패턴 사라짐 현상: 간헐적 문제 발생 시 Kibana 서비스 재시작으로 해결 가능
- Filebeat 프로세스 관리:
nohup보다는systemctl또는supervisord사용 권장