RAID-1
디스크 두 장, 같은 기록
5GB 디스크 두 장을 mdadm 으로 미러링해 /var/log/backuplog 에 마운트했습니다. 한 장이 빠져도 기록이 이어집니다.
// WHAT WE BUILT
RAID-1
5GB 디스크 두 장을 mdadm 으로 미러링해 /var/log/backuplog 에 마운트했습니다. 한 장이 빠져도 기록이 이어집니다.
RSYSLOG
UDP · TCP 514 로 받아 /var/log/backuplog/호스트/프로그램.log 에 나눠 저장합니다.
ELK
Logstash 가 syslog 를 grok 으로 나눠 Elasticsearch 에 날짜별 인덱스로 넣고, Kibana 로 봅니다. Kibana 는 담당자 PC 만 접속.
// CONFIGURATION
장비에 입력한 순서 그대로입니다. 계정 비밀번호는 공개 사이트라 가렸습니다.
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1 sudo mkfs.ext4 /dev/md0 sudo mkdir -p /var/log/backuplog sudo mount /dev/md0 /var/log/backuplog sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")
$template RemoteLogs,"/var/log/backuplog/%HOSTNAME%/%PROGRAMNAME%.log"
if ($fromhost-ip != '127.0.0.1') then {
action(type="omfile" dynaFile="RemoteLogs")
stop
}input { udp { port => 5514 type => "syslog" } tcp { port => 5514 type => "syslog" } }
filter { grok { match => { "message" => "%{SYSLOGTIMESTAMP:ts} %{SYSLOGHOST:host} %{DATA:program}: %{GREEDYDATA:msg}" } } }
output { elasticsearch { hosts => ["http://127.0.0.1:9200"] index => "cb-syslog-%{+YYYY.MM.dd}" } }sudo iptables -A INPUT -p tcp --dport 5601 -s 192.168.10.50 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 5601 -j DROP
// VERIFICATION
cb-log$ cat /proc/mdstat
md0 : active raid1 sdc1[1] sdb1[0]
5237760 blocks super 1.2 [2/2] [UU]
cb-log$ ls /var/log/backuplog
cb-web cb-db CB-L3-SW CB-L2-SW1 CB-L2-SW2 trusguard
cb-log$ curl -s localhost:9200/_cluster/health | jq .status
"green"// PITFALLS
| 증상 | 원인 | 해결 |
|---|---|---|
| Elasticsearch 시작 실패 | vm.max_map_count 부족 | sysctl -w vm.max_map_count=262144 |
| 재부팅 후 마운트 안 됨 | fstab 미등록 | UUID 로 fstab 등록 · nofail |