이 저장소에는 서버에 코드를 배포하기 위해 ansible을 사용하여 Elastic Stack + beats를 시작하는 데 필요한 모든 것이 포함되어 있습니다.
이 저장소에는 하나의 파일 (elk.yml)에 모든 코드가 포함 된 플레이 북이 있으며 "role"디렉터리 아래에는 ansible 역할이 있는데 이는 정확히 동일한 작업을 수행하지만 ansible 역할 설정 내에 있습니다.
ansible 플레이 북과 역할에 대한 이해가 도움이되지만 아래에 명령을 나열합니다.
Elastic Stack을 배포하려는 모든 노드에 다음을 설치하십시오.
현지:
먼:
저장소를 복제합니다.
# git clone https://github.com/dmccuk/ansible_ELK.git # cd ansible_ELK
# cd ansible_ELK/roles # ansible-playbook -i <server_name/ip>, deployELK.yml
main.yml을 편집하여 실행되는 구성 요소를 사용자 지정할 수 있지만 권장하지는 않습니다.
# vi elk_config/tasks/main.yml
Permission denied UNREACHABLE에 대한 오류가 발생하면 다음을 시도하십시오.
fatal: [34.245.169.116]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Warning: Permanently added '34.245.169.116' (ECDSA) to the list of known hosts.\r\nPermission denied (publickey).\r\n", "unreachable": true} to retry, use: --limit @/home/vagrant/ansible/roles/deployELK.retry PLAY RECAP ************************************************************************************************ 34.245.169.116 : ok=0 changed=0 unreachable=1 failed=0
pre_run.sh 스크립트에있는 다음 명령을 실행하십시오. .pem 키 이름으로 바꿉니다.
# ssh-agent bash # ssh-add ../you_ec2_key.pem
이제 ansible 플레이 북을 다시 실행하십시오. 이번에는 작동합니다.
Kibana의 URL로 이동하십시오.
http : // <server_or_IP> : 5601
Kibana 웹 페이지에서 "검색"또는 "관리"를 클릭하고 아래와 같이 색인을 추가합니다. 다음을 클릭하십시오.
스택을 배포 한 후에는 서버 명령 줄에서 다음 명령을 실행하여 사용 가능한 인덱스를 확인할 수 있습니다.
# curl -s http://localhost:9200/_cat/indices?v health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open .kibana 2UuCqV84Rb-u7rpUXHWDWg 1 0 2 0 20.9kb 20.9kb yellow open logstash-daily-2018.09.27 tbeKCDg_QOCB-7B-oQUiTQ 5 1 126642 0 77.4mb 77.4mb
전체 ansible 역할을 실행하면 Grafana가 기본적으로 설치됩니다. 수동으로 실행하려는 경우 다음과 같습니다.
# /data/grafana.sh --2018-09-27 09:11:58-- https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_5.1.4_amd64.deb Resolving s3-us-west-2.amazonaws.com (s3-us-west-2.amazonaws.com)... 54.231.185.64 Connecting to s3-us-west-2.amazonaws.com (s3-us-west-2.amazonaws.com)|54.231.185.64|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 52631282 (50M) [application/x-debian-package] Saving to: ‘grafana_5.1.4_amd64.deb’ grafana_5.1.4_amd64.deb 100%[=======================================>] 50.19M 7.04MB/s in 8.1s 2018-09-27 09:10:24 (6.23 MB/s) - ‘grafana_5.1.4_amd64.deb’ saved [52631282/52631282] Reading package lists... Done Building dependency tree Reading state information... Done Note, selecting 'libfontconfig1' instead of 'libfontconfig' adduser is already the newest version (3.113+nmu3ubuntu4). libfontconfig1 is already the newest version (2.11.94-0ubuntu1.1). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. (Reading database ... 60521 files and directories currently installed.) Preparing to unpack grafana_5.1.4_amd64.deb ... Unpacking grafana (5.1.4) over (5.1.4) ... Setting up grafana (5.1.4) ... Restarting grafana-server service... OK Processing triggers for systemd (229-4ubuntu21.4) ... Processing triggers for ureadahead (0.100.0-19) ... ● grafana-server.service - Grafana instance Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2018-09-27 09:10:27 UTC; 393ms ago Docs: http://docs.grafana.org Main PID: 2281 (grafana-server) CGroup: /system.slice/grafana-server.service └─2281 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --pidfile=/var/run/grafana/gra Sep 27 09:10:27 ip-172-31-25-50 grafana-server[2281]: t=2018-09-27T09:10:27+0000 lvl=info msg="Executing mi Sep 27 09:10:27 ip-172-31-25-50 grafana-server[2281]: t=2018-09-27T09:10:27+0000 lvl=info msg="Skipping mig Sep 27 09:10:27 ip-172-31-25-50 grafana-server[2281]: t=2018-09-27T09:10:27+0000 lvl=info msg="Executing mi Sep 27 09:10:27 ip-172-31-25-50 grafana-server[2281]: t=2018-09-27T09:10:27+0000 lvl=info msg="Skipping mig Sep 27 09:10:27 ip-172-31-25-50 grafana-server[2281]: t=2018-09-27T09:10:27+0000 lvl=info msg="Starting plu Sep 27 09:10:27 ip-172-31-25-50 grafana-server[2281]: t=2018-09-27T09:10:27+0000 lvl=info msg="Initializing Sep 27 09:10:27 ip-172-31-25-50 grafana-server[2281]: t=2018-09-27T09:10:27+0000 lvl=info msg="Initializing Sep 27 09:10:27 ip-172-31-25-50 grafana-server[2281]: t=2018-09-27T09:10:27+0000 lvl=info msg="Initializing Sep 27 09:10:27 ip-172-31-25-50 grafana-server[2281]: t=2018-09-27T09:10:27+0000 lvl=info msg="Initializing Sep 27 09:10:28 ip-172-31-25-50 systemd[1]: Started Grafana instance.
http : // <fqdn_or_IP> : 3000 방문
로그인 사용자 이름 및 비밀번호 : admin / admin
예시 grafana 대시 보드 파일을 추가합니다. 이것은 PC에 다운로드하고 Grafana (Grafana_basic_dashboard)로 가져올 수 있습니다.
이제 Elasticsearch를 데이터 소스로 설정하십시오.
저장하고 테스트합니다.
이제 대시 보드를 가져옵니다. 이 GitHub에서 PC (Grafana_basic_dashboard)로이 파일을 다운로드합니다.
대시 보드가 나타나고 기본 CPU 및 메모리 사용률이 표시됩니다.
Ubuntu에 "스트레스"프로그램을 설치하여 메트릭을 이동하고 grafana에서 확인하십시오.
# sudo apt install stress -y
CPU를 테스트하려면 :
# stress --cpu 3
CPU, 메모리 및 IO를 테스트하려면 :
# stress --cpu 3 -m 2 -d 1
이제 grafana로 돌아가서 서버 리소스 변경을 확인하십시오.
다른 Linux 서버에서 ansible 역할을 실행할 수 있습니다. deployELK.yml을 다시 실행하되 metricbeat 및 filebeat 부분 만 실행하십시오.
# cd ~/ansible_ELK/roles # ansible-playbook -i inventory_file deployBEATS.yml
배포가 완료되면 메트릭 통계를 원하는 모든 서버의 filebeat.yml에서 다음 줄을 편집합니다.
# ssh <IP_address_in_inventory> # sudo vi /data/filebeat-6.4.0-linux-x86_64/filebeat.yml output.logstash: FROM--> hosts: ["localhost:5044"] TO --> hosts: ["EC2_IP:5044"]
이제 filebeat를 다시 시작하여 새 설정을 업데이트합니다.
# sudo service filebeat restart
Multiserver grafana 대시 보드를 가져옵니다.
metricbeat 데이터를 사용하여 자신의 대시 보드를 추가해보십시오. 내 정보는 www.grafana.com으로 이동하십시오 .
이 설정을 사용하려면 서버에있는 여유 공간을 염두에 두어야합니다. 대용량 디스크에 ES 데이터를 저장하기 위해 별도의 LV를 만드는 것이 좋습니다. 한 서버가 24 시간 동안 가져 오는 데이터의 양을 계산하여 환경의 크기를 올바르게 조정해야합니다. 그런 다음 총 서버 수와 보관할 데이터의 기간을 계산하여 숫자를 곱합니다. 그런 다음 좋은 측정을 위해 25 %를 추가합니다.
ES 데이터는 나중에 검색 할 수 있도록 다른 위치에 보관 및 저장할 수 있습니다. 공간 부족 및 데이터 손실을 방지하려면이 프로세스를 자동화해야합니다.
또 다른 옵션은 ES의 infront에 Redis를 추가하는 것입니다. 이러한 방식으로 Redis는 서버 중 하나의 문제로 인해 메시지 폭풍이 닥쳤을 때 트래픽 및 서버의 최고점과 최저점을 버퍼로 관리 할 수 있습니다. 어떤 이유로 든 ES가 중단되는 경우 redis는 일정 시간 동안 (ES가 중단 된 동안) 메시지를 버퍼링 할 수 있으므로 ES를 복구하고 데이터를 손실하지 않을 수 있습니다.
도움이 되었기를 바랍니다. 봐 주셔서 감사합니다-Dennis