Elastic Stack-05-Filebeat-Logstash-Elasticsearch

10642 단어 Elasticelasticsearch
소개
이 문서 의 목적 은 앞의 몇 편 에서 말 한 지식 점 을 연결 시 켜 종합 적 으로 사용 하고 최종 적 으로 생산 에 사용 할 수 있 는 간단 한 배치 방안 이 라 고 부 르 는 것 이다.
Filebeat 를 사용 하여 Nginx 로 그 를 수집 하고 Logstash 로 출력 한 다음 Logstash 로 데 이 터 를 처리 한 후 Elasticsearch 로 출력 합 니 다.
2. 배치 절차
1 Elasticsearch 1 elasticsearch.yml
cluster.name: elk
node.name: ela1
node.data: true
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts:
   - 192.168.122.6
   - 192.168.122.106:9300
   - 192.168.122.218
cluster.initial_master_nodes: ["ela1", "ela2", "ela3"]

2 elasticsearch.yml
cluster.name: elk
node.name: ela2
node.data: true
network.host: 0.0.0.0
http.port: 9200

discovery.seed_hosts:
   - 192.168.122.6
   - 192.168.122.106:9300
   - 192.168.122.218
cluster.initial_master_nodes: [ela1, ela2, ela3]
3 elasticsearch.yml
cluster.name: elk
node.name: ela3
node.data: true
network.host: 0.0.0.0
http.port: 9200

discovery.seed_hosts:
   - 192.168.122.6
   - 192.168.122.106:9300
   - 192.168.122.218
cluster.initial_master_nodes: [ela1, ela2, ela3]

2 Logstash first-pipeline.conf
input {
   beats {
      port => 5044
   }
}

filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}" }
        remove_field => [ "message" ]
    }
    geoip {
       source => "clientip"
    }
}

output {
  stdout {
     codec => rubydebug
  }

  elasticsearch {
    #        elasticsearch    
    hosts => ["192.168.122.6:9200","192.168.122.106:9200","192.168.122.218:9200"]
  }
}

3 Filebeat filebeat.yml
filebeat.inputs:
- type: log
  enabled: false
  paths:
    - /var/log/*.log
- type: filestream
  enabled: false
  paths:
    - /var/log/*.log
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 1
setup.kibana:
output.logstash:
  hosts: ["localhost:5044"]
processors:
  - add_host_metadata:
      when.not.contains.tags: forwarded
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~
modules.d/nginx.yml
- module: nginx
  access:
    enabled: true
    var.paths: ["/var/log/nginx/access.log"]
  error:
    enabled: true

시동
1 Elasticsearch 그룹 시작 및 검증
클 러 스 터 의 모든 노드 는 다음 명령 을 수행 합 니 다.
./bin/elasticsearch  -d  -p /tmp/pid

임의의 노드 에서 클 러 스 터 상 태 를 검증 합 니 다.
군집 건강 상태
[root@ela1 ~]# curl -X GET "192.168.122.6:9200/_cat/health"
1609235083 09:44:43 elk green 3 3 8 4 0 0 0 0 - 100.0%

클 러 스 터 노드 정보
[root@ela1 ~]# curl -X GET "192.168.122.6:9200/_cat/nodes"
192.168.122.6   20 83 0 0.11 0.10 0.07 cdhilmrstw - ela1
192.168.122.218 12 88 0 0.02 0.02 0.05 cdhilmrstw - ela3
192.168.122.106 45 92 0 0.00 0.01 0.05 cdhilmrstw * ela2

2 Logstash 시작
시작 하지 않 았 거나 설정 파일 을 자동 으로 불 러 오지 않 았 다 면 다시 시작 해 야 합 니 다.
./bin/logstash -f first-pipeline.conf --config.reload.automatic

3 Filebeat 시작
시작 하지 않 았 다 면 다시 시작 해 야 합 니 다.
nohup   ./filebeat  &

검증
1 로그 파일 에 로그 메모 리 를 입력 하 는 것 을 받 았 습 니 다.
echo '10.9.29.211 - - [29/Dec/2020:17:43:09 +0800] "GET /35949/bundles/plugin/uptime/uptime.plugin.js HTTP/1.1" 200 5869 "http://10.9.12.250:8080/app/home" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1301.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat" "-"' >> /var/log/nginx/access.log

2 Logstash 터미널 보기
응용 에 상응하는 출력 이 있다
{
        "fileset" => {
        "name" => "access"
    },
            "log" => {
        "offset" => 193560,
          "file" => {
            "path" => "/var/log/nginx/access.log"
        }
    },
           "host" => {
                  "mac" => [
            [ 0] "78:2b:cb:64:4e:25",
            [ 1] "78:2b:cb:64:4e:27",
            [ 2] "78:2b:cb:64:4e:29",
            [ 3] "78:2b:cb:64:4e:2b"
        ],
             "hostname" => "prod",
                 "name" => "prod",
        "containerized" => false,
                   "os" => {
            "codename" => "Core",
                "name" => "CentOS Linux",
              "family" => "redhat",
             "version" => "7 (Core)",
            "platform" => "centos",
              "kernel" => "3.10.0-957.el7.x86_64"
        },
                   "ip" => [
            [ 0] "10.9.12.250",
            [ 1] "fe80::7a2b:cbff:fe64:4e25",
            [ 2] "192.168.122.1"
        ],
                   "id" => "e14bb5e04254411da829c0bc6beedbf3",
         "architecture" => "x86_64"
    },
        "request" => "/35949/bundles/plugin/uptime/uptime.plugin.js",
           "auth" => "-",
            "ecs" => {
        "version" => "1.5.0"
    },
     "@timestamp" => 2020-12-29T09:46:49.093Z,
          "agent" => {
            "hostname" => "prod",
                "name" => "prod",
             "version" => "7.10.0",
                "type" => "filebeat",
        "ephemeral_id" => "bfeb1d8f-d791-4706-9001-8ea26bd7557e",
                  "id" => "153bb637-ba53-4b3e-888d-7f60db4aa877"
    },
        "service" => {
        "type" => "nginx"
    },
           "verb" => "GET",
          "bytes" => "5869",
       "referrer" => "\"http://10.9.12.250:8080/app/home\"",
          "geoip" => {},
          "ident" => "-",
       "@version" => "1",
      "timestamp" => "29/Dec/2020:17:43:09 +0800",
       "response" => "200",
           "tags" => [
        [0] "beats_input_codec_plain_applied",
        [1] "_geoip_lookup_failure"
    ],
          "input" => {
        "type" => "log"
    },
       "clientip" => "10.9.29.211",
    "httpversion" => "1.1",
          "event" => {
         "dataset" => "nginx.access",
          "module" => "nginx",
        "timezone" => "+08:00"
    }
}

3 Elasticsearch 가 색인 을 만 들 었 는 지 확인
[root@prod logstash]# curl -X GET "192.168.122.6:9200/_cat/indices"
green open logstash-2020.12.29-000001 IgYwIwXVTeSqc6f4SGAa3Q 1 1 2 0 118.4kb 59.2kb

현재 logstash-2020.12.29-000001 는 Elasticsearch 가 자동 으로 만 든 색인 입 니 다.
5. 필요 한 색인 만 들 기
이전 검색 에서 알 수 있 듯 이 색인 은 Elasticsearch 가 자동 으로 만 들 어 졌 지만 생산 에서 원 하 는 것 이 아 닙 니 다.
비교적 좋 은 건 의 는:
  • 정확 한 방문 로그 access.log 의 내용 을 색인 에 따로 넣 습 니 다.
  • 오류 로그 error.log 의 내용 을 다른 색인 에 따로 넣 습 니 다.

  • 1 프로필 업데이트
    프로필 업데이트 후의 모습:
    input {
       beats {
          port => 5044
       }
    }
    
    filter {
        grok {
            match => { "message" => "%{COMBINEDAPACHELOG}" }
            remove_field => [ "message" ]
        }
        geoip {
           source => "clientip"
        }
    }
    
    output {
      stdout {
         codec => rubydebug
      }
      if [event][dataset] == "nginx.access" {
        elasticsearch {
          #        elasticsearch    
          hosts => ["192.168.122.6:9200","192.168.122.106:9200","192.168.122.218:9200"]
          #     ,     MySQL         
          index => "nginx-access-%{+YYYY.MM.dd}"
        }
      } else if  [event][dataset] == "nginx.error" {
      elasticsearch {
          #        elasticsearch    
          hosts => ["192.168.122.6:9200","192.168.122.106:9200","192.168.122.218:9200"]
    
          #     ,     MySQL         
          index => "nginx-error-%{+YYYY.MM.dd}"
        }
      }
    }
    

    2 관련 로그 파일 에 새 로그 내용 추가
    각각 두 개의 테스트 로그 파일 에 새 로그 내용 을 추가 합 니 다. asscess.log
    
    echo '10.9.29.211 - - [29/Dec/2020:17:43:09 +0800] "GET /35949/bundles/plugin/uptime/uptime.plugin.js HTTP/1.1" 200 5869 "http://10.9.12.250:8080/app/home" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1301.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat" "-"' >> /var/log/nginx/access.log
    
    error.log
    echo '2020/12/29 15:25:10 [warn] 3380#3380: *161 an upstream response is buffered to a temporary file /var/cache/nginx/proxy_temp/5/00/0000000005 while reading upstream, client: 10.9.29.234, server: localhost, request: "GET /35949/bundles/plugin/data/data.plugin.js HTTP/1.1", upstream: "http://127.0.0.1:5601/35949/bundles/plugin/data/data.plugin.js", host: "10.9.12.250:8080", referrer: "http://10.9.12.250:8080/app/home"' >> /var/log/nginx/error.log
    

    3 Elasticsearch 군집 의 색인 검증
    [root@ela1 ~]# curl -X GET "192.168.122.6:9200/_cat/indices"
    green open logstash-2020.12.29-000001 IgYwIwXVTeSqc6f4SGAa3Q 1 1 212 0  1.1mb 648.6kb
    green open nginx-access-2020.12.29    ien9RLwPTM2w0P_Vebrr3w 1 1   1 0 66.6kb  33.3kb
    green open nginx-error-2020.12.29     Bn0SV7i7STGVANn4x0mj4g 1 1   1 0 56.2kb  28.1kb
    
    logstash-2020.12.29-000001 원래 거 예요.nginx-access-2020.12.29nginx-error-2020.12.29 는 새로 설립 되 었 다.

    좋은 웹페이지 즐겨찾기