ELK 와 ElaticAlert 기반 시스템 구축 모니터링 경보

13536 단어 ELK
ELK 를 통 해 Nginx 의 로그 수집 과 분석 을 배 웠 습 니 다. 로그 가 있 으 면 로 그 를 통 해 서버 의 접근 상 태 를 실시 간 으로 모니터링 할 수 있 습 니 다.보통 Nginx 는 프 록 시 서버 로 사용 되 는데 저희 의 응용 서비스 가 어떤 이유 로 끊 겼 을 때 Nginx 의 방문 이 빈번 한 502 상황 이 발생 합 니 다. 이 장면 을 바탕 으로 저 희 는 경 고 를 해서 문 제 를 해결 하 라 고 알려 줄 수 있 습 니 다.
이 글 은 ELK 기반 모니터링 과정 을 간단히 소개 한다.
1. ELK 의 설치
먼저 ELK 의 구축 입 니 다. 여 기 는 더 이상 군말 하지 않 고 한 편의 글 을 참고 하여 ELK 로그 분석 플랫폼 을 신속하게 구축 할 수 있 습 니 다.
2. ElastAlert 설치 및 설정
1. 설치
경보 구성 요 소 는 ElastAlert 를 사용 합 니 다.여기 Yelp 회 사 는 Python 이 쓴 오픈 소스 구성 요 소 를 사용 합 니 다.주 소 는 여기 있 습 니 다: ElastAlert. 두 가지 방식 으로 설치 할 수 있 습 니 다.
  • pip 직접 설치
  • pip install elastalert
  • 원본 다운로드 설치
  • git clone https://github.com/Yelp/elastalert.git
    pip install "setuptools>=11.3"
    python setup.py install

    원본 코드 를 다운로드 하 는 방식 으로 설치 하 는 것 을 더욱 추천 합 니 다. 원본 코드 에 여러 가지 예시 코드 가 있 기 때문에 현지에서 조정 을 편리 하 게 참고 할 수 있 습 니 다.
    또한 ES 와 상호작용 을 하기 위해 elasticsearch 가방 을 설치 해 야 합 니 다.
    pip install "elasticsearch>=5.0.0"
  • ElastAlert 에 필요 한 색인 만 들 기
  • 감시 경 보 를 실행 할 때마다 ElastAlert 는 일부 메타 정 보 를 ES 에 저장 합 니 다. 여기 서 우 리 는 수 동 으로 색인 을 만 들 고 명령 을 수행 합 니 다.
     elastalert-create-index

    이 명령 을 실행 하면 ES 에서 다음 과 같은 색인 을 만 듭 니 다.
  • elastalert_status_status: 매번 rule 의 조회 결과 에 따라 조회 시간 대, 조회 결과 등
  • 을 기록 합 니 다.
  • elastalert_status: 경고 정 보 를 기록 하고 조회 가 끝나 면 경고 조건 에 이 르 러 경찰 에 신고 해 야 할 때 신고 와 관련 된 정 보 는 여기에 저 장 됩 니 다.
  • elastalert_status_error: ElastAlert 에 발생 한 오 류 를 기록 합 니 다
  • elastalert_status_silence: 무시 되 는 경 고 를 표시 합 니 다. 일부 경 고 는 이전 과 중복 되 거나 무시 한 후에 실제 실행 되 지 않 는 경 고 를 기록 할 수 있 습 니 다.

  • 2. config. yaml 프로필.
    설치 가 완료 되 기 전에 먼저 프로필 을 수정 해 야 합 니 다.여기 서 ES 의 주소, 경보 규칙 파일 경로 등 기본 적 인 설정 을 설정 할 수 있 습 니 다. 다음은 몇 가지 기본 적 인 설정 입 니 다.
    #        ,       rule   
    rules_folder: /usr/local/elastalert/my_alert_rules
    
    #     ,            ES   
    run_every:
      minutes: 1
    
    #    ES     
    es_host: localhost
    
    #    ES   
    es_port: 9200
    

    3. rule 파일 설정
    rule 파일 은 경보 규칙 을 조회 하 는 것 을 표시 합 니 다.ElastAlert 는 여러 개의 rule 파일 을 지원 합 니 다. config. yaml 에 설 정 된 rules 를 찾 을 수 있 습 니 다.folder 는 그 중의 모든 rule 파일 을 실행 하여 조회 와 경 고 를 합 니 다.
    【 1 】. 기본 설정
    rule 파일 은 모니터링 과 경보 규칙 을 설정 하 는 데 사 용 됩 니 다. 먼저 해당 하 는 색인, 이름, 유형 을 밝 혀 야 합 니 다.
    #     ,   rule         ,      
    name: test_502_alert
    
    #    ,        ,        
    index: nginx_log_*
    
    #   ,frequency          
    type: frequency
    
    #   ,     
    num_events: 50
    
    #     ,         。   num_events                 50       
    timeframe:
      minutes: 1

    여기 서 사용 하 는 것 은 frequency 가 발생 횟수 에 따라 조회 하 는 것 이다.ElastAlert 는 다음 과 같은 다른 조회 방식 도 제공 합 니 다.
  • any: 모든 매 칭 에 경보 가 울 립 니 다
  • blacklist: 블랙리스트, compare 지정 을 통 해key 필드, 이 필드 의 값 을 블랙리스트 의 값 과 비교 하고 존재 하면 경고
  • 를 실행 합 니 다.
  • 화이트 리스트: 화이트 리스트 와 반대로 comparekey 필드 와 화이트 리스트 의 값 을 비교 합 니 다. 경고 가 존재 하지 않 거나 트리거 되 지 않 으 면
  • change: 지정 comparekey 필드 를 모니터링 하고 이 필드 의 값 이 바 뀌 면 경고
  • 를 촉발 합 니 다.
  • frequency: 주파수 에 따라 경고 하고 timeframe 시간 내 에 일치 하 는 결과 가 num 에 도달 합 니 다.이벤트 시 경보 발동
  • flatline: 수평선 으로 직역 합 니 다. 사실은 이 threshold 한도 값 입 니 다. timeframe 은 시간 대 에 일치 하 는 횟수 가 threshold 에 도달 하면 경 보 를 울 립 니 다
  • new_term: 지정 한 fields 의 한 필드 에 새로운 값 이 있 을 때 경고 가 발생 합 니 다
  • 이상 은 주요 한 몇 가지 규칙 유형 이 고 더 자세 한 내용 은 공식 문 서 를 참조 할 수 있 습 니 다.
    frequency 조회 에 대해 서 는 좀 더 말씀 드 리 겠 습 니 다. 실제 상황 에서 여러 대의 서버 를 모니터링 해 야 하기 때 문 입 니 다. 이 때 는 서버 에 따라 횟수 를 집계 해 야 합 니 다. 한 서버 의 오류 빈도 가 num 을 초과 할 때.이벤트 시 경찰 에 신고 합 니 다. 여 기 는 querykey 설정 으로 지정
          query_key   server_name.keyword502        ,               。
    query_key: server_name.keyword

    【 2 】 일치 하 는 규칙 설정
    기본 설정 이 완료 되면 조회 규칙 을 설정 해 야 합 니 다.ElastAlert 는 설 정 된 조회 규칙 에 따라 ES 에 데 이 터 를 조회 합 니 다. 결과 가 num 에 도달 하면이 벤트 는 경 고 를 보 냅 니 다.
    기본 예 는 다음 과 같다.
    filter:
      - terms: #      ,   server_name       ['server01', 'server02']   
          server_name: ['server01', 'server02']
      - term: #     ,   response_code   502    
          response_code: 502

    그 주요 조회 방식 은 다음 과 같은 몇 가지 가 있다.
    query string
    모호 일치
    filter:
    - query:
        #    username     bob    
        query_string:
          query: "username: bob"
    - query:
        #    name    tom   address    USA    
        query_string:
           query: "name: tom AND address: USA"

    term
    정확하게 일치 합 니 다. 필드 의 값 이 주어진 값 과 같 아야 조회 할 수 있 습 니 다.
    filter:
      - term: #     ,response_code     502           response_code: 502

    terms 를 통 해 여러 값 을 일치 시 킬 수도 있 습 니 다.
    filter:
      - terms: # name                       name: [Faker, Mlxg, Uzi]

    와 일 드 카드 어댑터 일치
    filter:
    - query:
        wildcard: #    filenae   ngxin   、log       
          filename: "nginx_*_log"

    range
    범위 조회,
    filter:
    - range:
        status_code: #        500 ~ 599      ,             
          from: 500
          to: 599

    ElastAlert 의 조회 규칙 은 ES 의 DSL 을 바탕 으로 확정 되 었 고 익숙 하지 않 은 학생 들 이 ES 의 문 서 를 조회 하 는 것 이다.
    【 3 】. 경고 방식 설정
    ElastAlert 는 이메일 메 일, slack, http post 요청 등 을 통 해 신고 메 시 지 를 보 낼 수 있 는 매우 많은 경고 방식 을 제공 했다.여러 개의 경고 방식 을 동시에 지정 할 수 있다.여기 서 우 리 는 이메일 과 post 로 신고 방식 을 지정 합 니 다.
    #           
    alert:
     - "email"  - "post"

    경고 방식 을 지정 하면 각 경고 방식 에 대해 맞 춤 형 설정 을 해 야 한다.우선 이메일 설정 입 니 다. 메 일 서버, 수신 자, 메 일 내용 등 을 알려 야 합 니 다.
    #             ,
    smtp_host: "smtp.sina.cn"
    smtp_port: 25
    #              ,                ,                    
    smtp_auth_file: "/usr/local/elastalert/sina_auth.yaml"
    
    # sina_auth.yaml       
    # user: "[email protected]"
    # password: "mypassword"
    
    #       ,         
    alert_text: |
        In the past 1 minute, Cloud Application have been more than 50 times 502 exceptions on the {0} machine. Please pay attention to the status of the server in time.
        "timestamp": {1}
    alert_text_args: ["host.name.keyword", "@timestamp"] #    ,      text         
    alert_text_type: alert_text_only #       ,
    
    #      
    from_addr: "[email protected]"
    
    #      ,      
    email:
      - "[email protected]"
      - "[email protected]"

    그 다음은 post 가 요청 한 설정 입 니 다. 저 는 post 를 문자 서비스 로 가리 키 고 신고 할 때마다 문 자 를 받 습 니 다.
    #       
    http_post_url: "http://mysite.alert.cn/api/v2/alert/"
    #    post   ,       ES      
    http_post_payload:
      server: host.name.keyword
      num_hits: num_hits
    
    #       。
    http_post_static_payload:
      response_code: 502
      service_name: mysite

    여기 두 가 지 는 주의해 야 한다.
  • http_post_payload: ES 에서 elastaller 를 보 냈 습 니 다.status 인덱스 의 필드 값, 필드 가 없 으 면 None
  • http_post_static_payload: ES 색인 에 없 는 정적 인자
  • 를 보 냅 니 다.
    설정 이 완료 되면 python 명령 을 통 해 직접 실행 할 수 있 습 니 다.
    python -m elastalert.elastalert --verbose --rule example_rules/test.yaml
    INFO:elastalert:Starting up
    INFO:elastalert:Queried rule test_502_alert from 2018-08-22 13:30 UTC to 2018-08-22 13:30 UTC: 0 buckets
    INFO:elastalert:Ran test_502_alert from 2018-08-22 13:30 UTC to 2018-08-22 13:30 UTC: 0 query hits (0 already seen), 0 matches, 0 alerts sent
    INFO:elastalert:Sleeping for 59.794757 seconds

    python 명령 을 통 해 실행 되 는 몇 가지 매개 변 수 는 주의해 야 합 니 다. * – verbose 출력 디 버 깅 정보 * – debug 는 디 버 깅 만 출력 하고 경보 * – config 지정 프로필 * – rule 지정 규칙 파일 은 실행 되 지 않 습 니 다.
    그 밖 에 디 버 깅 이 완료 되 어 서비스 로 실 행 될 때 저 희 는 Supervisor 를 사용 하여 서비스 관 리 를 할 수 있 습 니 다. 설정 파일 은 다음 과 같 습 니 다.
    [program:elastalert]
    # workon elastalert                  
    # running globally
    user=dev
    command=sudo elastalert --config /usr/local/elastalert/config.yaml
    autorestart=true
    startsecs=15
    stderr_logfile=/var/log/supervisor/elastalert.log
    stdout_logfile=/var/log/supervisor/elastalert.log

    이상 은 전체 감시 경보 시스템 의 간단 한 구축 과정 이다. 결 과 를 보면 20 대의 기 계 를 감시 하고 특정한 기계 가 1 분 에 50 번 이 넘 는 502 요청 을 할 때마다 1 분 안에 신고 문 자 를 받는다. 물론 문제 의 포 지 셔 닝 은 스스로 해 야 한다.만약 에 잘못된 제시 에 따라 진일보 한 운영 처 리 를 할 수 있다. 예 를 들 어 자동 확장, 기계 부하 변경 에 문제 가 있 는 기계 차단 등 이다. 현재 처리 방식 에서 출발 하여 생각 은 해당 하 는 post 요청 에서 해당 하 는 처 리 를 하 는 것 이다. 다른 건의 와 관심 이 있 는 친구 들 의 교류 지적 을 환영 합 니 다.

    좋은 웹페이지 즐겨찾기