레이블이 elk인 게시물을 표시합니다. 모든 게시물 표시
레이블이 elk인 게시물을 표시합니다. 모든 게시물 표시

2022년 8월 23일 화요일

4. elasticsearch의 JAVA경로 설정

쉘에서는 java실행이 정상적으로 되고 있는데, Elasticseearch를 실행하면 java경로를 찾지 못하는 문제 발생.

근데! Elasticsearch를 실행시키면 java가 없덴다… 그래서 실행이 안됨.

Sep  7 00:48:55 TEST elasticsearch: which: no java in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)
Sep  7 00:48:55 TEST elasticsearch: Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME
Sep  7 00:48:55 TEST systemd: elasticsearch.service: main process exited, code=exited, status=1/FAILURE

java는 설치 잘 되어 있는데....

[root@TEST ~]# echo $JAVA_HOME
/usr/local/java

[root@TEST ~]# which java
/usr/local/java/bin/java
  1. 해결책1. /etc/profile에 JAVA경로 잘 되어 있는지 확인
    [root@TEST ~]# tail -4 /etc/profile
    
    PATH=$PATH:$JAVA_HOME/bin
    export JAVA_HOME=/usr/local/java
    export PATH=$JAVA_HOME/bin:$PATH
  2. 해결책2. Elasticsearch에 java경로를 설정
    [root@TEST ~]# tail -1 /etc/sysconfig/elasticsearch
    JAVA_HOME=/usr/local/java

설정하고 Elasticsearch실행하면 프로세스 실행되는게 확인되실꺼예요~



출처 - http://igoni.kr/books/linux/page/4-elasticsearch-java

3. ELK stack Install

ELK Stack Install

ELK Stack 패키지 설치 - ELK서버에서 수행
  1. repository 구성
    $ vi /etc/yum.repos.d/elk.repo
    
    [logstash-7.x]
    name=Elastic repository for 7.x packages
    baseurl=https://artifacts.elastic.co/packages/7.x/yum
    gpgcheck=0
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md

  2. java 설치  (java 설치 버전은 1.8 버전으로 배포 진행)
    $ yum install java -y
    $ java -version
    openjdk version "1.8.0_282"
    OpenJDK Runtime Environment (build 1.8.0_282-b08)
    OpenJDK 64-Bit Server VM (build 25.282-b08, mixed mode)

  3. Logstash / Elasticsearch / Kibana 설치 
    $ yum install logstash elasticsearch kibana -y

ELK Stack Config - ELK서버에서 수행
  1. kibana 설정
    $ vi /etc/kibana/kibana.yml
    ...
    server.host: "0.0.0.0" (외부에서 webui 접근이 0.0.0.0 으로 사용)
    ...
    elasticsearch.hosts: ["http://localhost:9200"] (Elasticsearch 설치 서버 ip)
    ...
    i18n.locale: "ko-KR"
     

  2. Cluster 기반의 Elasticsearch 설정
    $ vi /etc/elasticsearch/elasticsearch.yml
    ...
    cluster.name: es-cluster                     # 클러스터링 할 서버는 동일한 cluster.name값으로 설정
    node.name: ${HOSTNAME}                       # 클러스티링할 서버 호스트네임 (노드별로 uniq한 값이어야 함)
    path.data: /data/elasticsearch               # Elasticsearch Data경로
    path.logs: /var/log/elasticsearch            # Elasticsearch 로그경로
    network.host: 0.0.0.0                        # 외부에서 접속시 설정
    discovery.seed_hosts: ["192.168.0.41", "192.168.0.42", "192.168.0.43"]    #Elasticsearch Discovery 호스트 설정
    cluster.initial_master_nodes: ["192.168.0.41", "192.168.0.42", "192.168.0.43"] #마스터 서버 리스트
    ...
    http.port: 9200                              # http 호스트 사용하는 포트
    transport.tcp.port: 9300                     # 데이터 전송 포트
    ...
    node.master: true                            # master 노드 역활시 true
    node.data: true                              # data 노드 역활 적용시 true
    ...
    index.number_of_replicase: 1 #각 인덱스를 3개의 replicaset으로 구성
    index.number_of_shards: 2 #각 인덱스를 샤딩 
    ...
    node.attr.box_type: hot #노드역활 설정 (hot / warm / clod 중 선택)

  3. logstash config 설정
    $ vi /etc/logstash/conf.d/nginx.conf
    input {
      beats {
        port => 5044
        host => "0.0.0.0"
      }
    }
    
    output {
      elasticsearch {
        hosts => ["http://localhost:9200"]
        index => "nginx-%{+YYYY.MM.dd}"
        #user => "elastic"
        #password => "changeme"
      }
    }
    
    
    #config 참고해서 logstash 구동하도록 설정 (기존 설정값 삭제 후 아래내용 설정)
    
    $ vi /etc/systemd/system/logstash.service
    ...
    ExecStart=/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx.conf
    ...
    
    $ systemctl daemon-reload

  4. filebeat 설치 - log를 전달할 서버에 설치
    1. repository 구성
      $ vi /etc/yum.repos.d/elk.repo
      
      [logstash-7.x]
      name=Elastic repository for 7.x packages
      baseurl=https://artifacts.elastic.co/packages/7.x/yum
      gpgcheck=0
      gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
      enabled=1
      autorefresh=1
      type=rpm-md
    2. 패키지 설치
      $ yum install filebeat -y

    3. filebeat 설정
      $ vi /etc/filebeat/filebeat.yml
      ...
      filebeat.inputs:
      - type: log
        enabled: true   #true로 변경
        paths: #Logstash로 전달할 로그파일 혹은 경로를 설정하면 된다.
          - /svc/stg/web/logs/access.log 
          - /var/log/cmd.log
          - /var/log/kibana/*
      ...
      setup.kibana:
        host: "192.168.0.41:5601" #Kibana 서버 IP
      ...
      #output.elasticsearch: #filebeat -> logstash로 전달할것이기 때문에 elasticsearch는 주석처리
      # hosts: ["localhost:9200"]
      ...
      output.logstash:  #주석해제
        hosts: ["192.168.0.41:5044"] #logstash 서버ip/포트 설정
      ...

프로세스 실행

  1. kibana / elasticsearch 프로세스 실행 - ELK 서버에서 수행
    $ systemctl enable kibana --now
    $ systemctl enable elasticsearch --now
    $ systemctl enable logstash --now
  2. filebeat 서비스 구동 - Log 전달할 서버에서 수행
    $ systemctl enable filebeat --now

서비스 작동 확인

  1. logstash 기능 확인
    #logstash 포트 LISTEN 확인
    $ netstat -antp| grep 5044 | grep LISTEN
    tcp6       0      0 :::5044                 :::*                    LISTEN      6730/java
    
    
    #filebeat → logstash로 데이터 전송이 되는지 확인 (logstash서버에서 수행)
    $ tcpdump -nn port 5044 -i bond0
    14:11:35.759481 IP 192.168.0.41.5044 > 192.168.0.2.34160: Flags [P.], seq 379:385, ack 87143, win 1432, options [nop,nop,TS val 341934898 ecr 464702009], length 6
    14:11:35.760109 IP 192.168.0.2.34160 > 192.168.0.41.5044: Flags [.], ack 385, win 115, options [nop,nop,TS val 464702013 ecr 341934898], length 0
  2. Elasticsearch 기능 작동 확인
    #Elasticsearch 포트 LISTEN 확인
    $ netstat -antp | grep 9200 | grep LISTEN
    tcp6       0      0 :::9200                 :::*                    LISTEN      11324/java
    
    #logstsh에서 전달한 데이터가 elasticsearch에서 index수집되는지 확인
    $ curl --connect-timeout 2 -XGET http://127.0.0.1:9200/_cat/indices?v
    health status index                           uuid                   pri rep docs.count docs.deleted store.size pri.store.size
    green  open   .kibana_task_manager_7.12.0_001 jNMZ2LZcRtqYkwCrQqCsdQ   1   1          9           10     92.6kb         73.7kb
    green  open   .apm-custom-link                MmzSDfLtSXuQCYwqXoYbFg   1   1          0            0       416b           208b
    green  open   .apm-agent-configuration        xbHoMaQ0QUS2WAsOy3Uspw   1   1          0            0       416b           208b
    green  open   .async-search                   pMPoD_2OQzue0gJH-vSdig   1   1          1            0     90.9kb         46.9kb
    green  open   .kibana_7.12.0_001              Qmo4u9gjTOmihGVwJlguqQ   1   1         22            0      6.3mb          4.2mb
    green  open   .kibana-event-log-7.12.0-000001 VykSos0vR1W_l5F2E5G2pg   1   1          2            0     21.9kb         10.9kb
    green  open   .elastichq                      7sr4ATTsSnasGRH4tJhCBA   1   1          1            0     13.7kb          6.8kb
    green  open   .tasks                          X2B8PyG5SMCV0dPAo6eH4g   1   1          2            0     15.5kb          7.7kb
  3. 클러스터 구성 정보 확인
    $ curl --connect-timeout 2 -XGET http://127.0.0.1:9200/_cluster/health?pretty=true
    {
      "cluster_name" : "es-cluster",   #클러스터 이름
      "status" : "green",              #클러스터 상태
      "timed_out" : false,
      "number_of_nodes" : 3,           # 마스터 노드 수
      "number_of_data_nodes" : 3,      # 데이터 노드 수
      "active_primary_shards" : 9,
      "active_shards" : 18,
      "relocating_shards" : 0,
      "initializing_shards" : 0,
      "unassigned_shards" : 0,
      "delayed_unassigned_shards" : 0,
      "number_of_pending_tasks" : 0,
      "number_of_in_flight_fetch" : 0,
      "task_max_waiting_in_queue_millis" : 0,
      "active_shards_percent_as_number" : 100.0
  4.  Kibana 구성정보 확인
    #kibana 포트 LISTEN 확인
    $ netstat -antp | grep 5601 | grep LISTEN
    tcp        0      0 0.0.0.0:5601            0.0.0.0:*               LISTEN      13513/node
    
    #kibana 접속 확인
    $ curl -IL -XGET http://192.168.0.41:5601/app/home/
    HTTP/1.1 200 OK
    content-type: text/html; charset=utf-8
    content-security-policy: script-src 'unsafe-eval' 'self'; worker-src blob: 'self'; style-src 'unsafe-inline' 'self'
    kbn-name: SKB-DJK-ELK1
    kbn-license-sig: 0f6943d9f4b6625724a0d78fe647bbe2f284a6e24fb46f587b17b1b0bec18e34
    cache-control: private, no-cache, no-store, must-revalidate
    content-length: 127971
    vary: accept-encoding
    accept-ranges: bytes
    Date: Fri, 09 Apr 2021 05:52:47 GMT
    Connection: keep-alive
    Keep-Alive: timeout=120

Kibana Index Pattern 설정

  1. WebUI : http://kibanaIP:5601

    image.png


  2. Management → Stack Management → Kibana → Index patterns


    image.png


  3. {{ index name }}-YYYY.mm.DD 패턴이 보이지 않으면 elasticsearch에서 데이터가 아직 유입되지 않은 상태.
  4. Search에서 등록할 index명 입력 후 Create index pattern 선택
  5. Time filed에는 @timestamp 선택 후 Create index pattern 선택

    image.png


  6. Analytics → discover 선택하면 유입된 데이터 확인 가능

    image.png


WEB UI를 통한 Elasticsearch 상태 확인
  • docker 설치 후 cerebro container 구동
    $ docker container run -d --name cerebro --restart always -p 9000:9000 -m 512m lmenezes/cerebro:latest
    8d691f585fa8: Pull complete
    3da6fe7ff2ef: Pull complete
    e22147996cc0: Pull complete
    8df48a2d4467: Pull complete
    45e578fea430: Pull complete
    Digest: sha256:1cd0765418f1737de3533648d549655437eb550ee0cfad27488c19e620028f2f

  • WEB UI 로그인 : htttp://elk서버ip:9200

    image.png


  • Node address에 ELK 설치된 서버 IP입력
  • 첫화면(Overview) : Elastic 서버 & 인덱스 상태확인

    image.png


  • Nodes : 노드 상태 확인 (별표에 색깔 칠해진 노드가 master 노드)

    image.png



출처 - http://igoni.kr/books/linux/page/3-elk-stack-install

2. ELK Config 정보

sword 신뢰하는 저장소 복호화시 사용하는 암호
서버 SSL설정 server.ssl.redirectHttpFromPort 모든 http 요청을 https로 리다이렉션 함
서버 SSL설정 server.ssl.supportedProtocols 지원되는 SSL프로토콜 TLSv1.1, TLSv1.2, TLSv1.3
서버보안 server.xsrf.allowlist API 보호기능 비활성화 enable
서버보안 server.xsrf.disableProtection ture설정시 kibana에서 사이트 위조방지 기능 비활성화 false
서버보안 status.allowAnonymous true설정시 미인증사용자 사용불가 false
서버보안 telemetry.allowChangingOptInStatus 고급설정에서 원격 분석 설정 변경 가능 true
서버보안 telemetry.optIn 원격 데이터의 수집가능 true
서버보안 telemetry.enabled 클러스터 통계를 보고시 사용 true
서버보안 vis_type_vega.enableExternalUrls 모든 url을 사용하여 외부 데이터 소스 및 이미지에 액세스 할수 있도록 구성하려면 true 설정 false
xpack설정 xpack.license_management.enabled xpack 라이선스 관리UI사용하지 않으려면 false true
xpack설정 xpack.rollup.enabled xpack 롤업 UI를 사용하지 않으러면 false 설정 true
서버설정 i18n.locale kibak인터페이스 언어 설정 en

1) SSL리스트: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256, ECDHE-ECDSA-AES128-GCM-SHA256, ECDHE-RSA-AES256-GCM-SHA384, ECDHE-ECDSA-AES256-GCM-SHA384, DHE-RSA-AES128-GCM-SHA256, ECDHE-RSA-AES128-SHA256, DHE-RSA-AES1

* CSP ; Content-Security-Policy (https://w3c.github.io/webappsec-csp/ 참고)



출처 - http://igoni.kr/books/linux/page/2-elk-config

1. ELK Stack 소개

ELK Stack?

  • 각 서버에 저장된 로그성 데이터를 한곳에 모아서 시각화 하는 Opensource
  • Elasticsearch / Logstash / Kibana를 줄여 ELK라고 명칭하고 있었고, fileBeat가 추가되면서 ELK Stack으로 명칭.

Component별 역활

  • filebeat : 시스템에 기록된 로그데이터를 logstash로 보내기 위한 역활
    (logstash보다 경량화되었고, 로그데이터가 json으로 파싱되어 있는 경우 logstash를 거치지 않고 elasticsearch바로 전송할 수 있다 함)
  • Logstash : filebeat에서 받은 로그, 시스템에 기록된 로그데이터를 Elasticsearch로 보내는 역활
  • Elasticsearch : logstash에서 전달받은 데이터를 DB화 수행
  • Kibana : Elasticsearch에서 정제된 데이터를 시각화 수행

하드웨어 요구사항

Component
Hardware
설  명
비   고
Elasticsearch cpu 8 Core
Elasticsearch mem

최소 : 16GB

권장 : 64GB 이상 

8GB 이하에서 사용시 작동오류 발생할 수 있음
Elasticsearch disk

SSD 사용

* ssd에서는 io스케쥴러는 deadline대신 noop으로 변경

cfq : r/r, deadline : 10초, noop : 
* ATA디스크를 사용해야 할 경우 15K rpm 디스크 사용
* NAS에 데이터 저장은 비권장

Kibana cpu 8 Core
Kibana mem 최소 1GB
권장 : 4GB 이상

Kibana disk 제약없음
Logstash cpu 2Core
Logstash mem 2GB 
Logstash disk 제약없음

* Elasticsearch에서 사용할 디스크 용량 계산 방법
   (예상 로그양 * 보관일 ) * 데이터 노드수가 기본적인 용량 계산방법

ELK Data Flow

  1. Node에 설치되는 filebeat대신에 logstash를 설치해서 ElasticSearch로 바로 전송할수 있음.

  2. filebeat / logstash의 RSS메모리 사용량 비교
    image.png

    • 로그 데이터는 초당 1Mbyte씩 전송할수 있게 로그파일 생성, 총 100초동안 초단위로 수집 진행

Elasticsearch 구성

  • 시스템 구성
    image.png
  • Elasticsearch 노드 종류
    • master node : Elasticsearch의 인덱스 메타데이터, 샤드, 클러스터 상태 정보를 관리하는 역활.. 서버 수량이 많을때 모든 노드가 master역활을 수행할 경우
      성능상 부담이 되기 때문에 통상적으로 10대이상 구성될 경우 master/data 노드 분리해서 운영하는것이  best practice
    • data node : 실제 데이터를 저장하는 노드
  • Cluster기반의 통신정책
    • 클라이언트와 Elasticsearch와의 통신을 위한 포트 : tcp/9200
    • Elasticsearch노드간의 통신을 위한 포트 : tcp/9300
  • 용어 확인 / 비교


DBMS (like, mysql)
Elasticsearch
database index
table type
row document
column field
schema mapping
index index
sql Query DSL
select GET (Rest API사용)
update PUT (Rest API사용)
insert POST (Rest API사용)
delete DELETE (Rest API사용)


Index 수명주기에 따른 노드 관리 : 6.7이후부터 공식릴리즈에 포함된 기능

  • hot : 가장많이 검색되는 인덱스
  • warm : 검색되긴하지만, 자주 검색되지 않은 인덱스
  • cold : 자주 검색되지 않으나, 만약을 위해 유지하는 인덱스

Index 관리 규칙

  • Create :  인덱스 생성
  • close : 인덱스는 유지하되, write는 불가
  • delete : 인덱스 삭제

Index 상태 확인

  • green : 샤드, 리플리케이션 모두 정상인 상태
  • yellow : 일부 인덱스가 비정상적으로 구동되고 있는 상태
  • red : 모든 인덱스의 샤드가 비정상적으로 구동되고 있는 상태, 인덱스 데이터의 read/write가 불가능

데이터  관리방안 (인덱스 생성시 정해야 하고, 데이터가 저장되어 있는 경우 re-index 작업해야 반영됨)

  • shard : 
    • Document를 노드단위로 분산저장하는 방식 (7.x부터는 Default가 1로 설정, 6.x 이하는 Default가 5)
    • 데이터를 분산 저장하는 것뿐만 아니라 분산 검색도 수행함. shard의 갯수가 증가할수록 쿼리 속도도 증가(분산 쿼리)
  • replica : 
    • Primary shard(원본데이터)갯수만큼 복제
      shard(2개), replica(1개)로 구성한 경우 2x1 = 2개의 replica가 생성, replica의 데이터는 primary shard가 없는 노드에 각각 저장
    • node = 3, shard = 2, replica = 1로 구성된 경우 노드별 데이터 저장 방식

0. ELK 라이선스 webinar 참석

Elastic에서 라이선스 모델 webinar 진행


과금모델

  1. 노드당 과금 진행 (기존에는 에이전트, APP단 용량, 유저당, cpu 코어당 비용 모델이였음)
  2. 기술지원 (24x7x365) 제공, 교육 및 유지보수 지원

추가 기능 (License 모델에 따라 제공되는 기능의 차이가 있음)

  1. 기존에 hot / warm / cold 말고 fronzen 노드가 추가 (필요한 데이터만 로딩하기 때문에 메모리 대비 처리하는 데이터 비율이 1:1600)
    약 64G메모리에 100TB가량의 데이터 저장가능
  2. Fleet : beats의 수량이 많아지면서 beats를 통합관리한 모델
  3. CCR; Cross Cluster Replication 기능추가
    1. 클러스터간 실시간 동기화 (HA / DR구성 제공)
    2. 공공기관의 경우 법적이 이슈때문에 보관주기가 길고, 저장되는 데이터가 분리되어야 하는 사례가 있음
  4. Correlation(APM 상관분석) : 에러의 원긴을 자동으로 식별하고, latency, error rate 두가지 측면에서 문제가 되는 트랜잭션을 식별

Basic라이선스 모델

  1. Basic 라이선스는 별도 비용이 없음.
  2. 내부에 ES엔지니어가 있어야 하고, 리세일링 활동 불가
  3. 판매 / 재배포 / 용역 활동 불가능하고, 운영 서비스 장애지원, 정기점검, 서버 증설, 업그레이드 등 제공 안함.
  4. 사업영역으로 사용할 수 없고, 로그수집, 단순 연구목적으로만 사용가능

추가 공유사항

  1. '21년 3월 이후부터 AWS에서 제공되는 ES;Elastic Search는 Elastic사에서 공급하는 S/W가 별도의 S/W임 (양사간 법적인 다툼이 있어서 제공하지 않음)
  2. '21년 3월에 출시되는 7.12이후부터는 OSS;Open source Software 라이선스 제공 하지 않고, Basic라이선스만 제공.(7.11까지는 OSS버전 제공)


adfit

AI들끼리 대화하기

ChatGPT, perplexity, Gemini... 많은 AI 서비스가 있고 서비스별로 다양한 엔진이 있죠. 문득 AI끼리 대화를 시켜보면 어떤 대화의 흐름을 이어갈까 궁금해졌습니다. 그래서 해보았습니다. 규 칙 나(사람)은 양쪽 AI에서...