ELK(Elasticsearch) 7계에서 CSV로부터 Coordinate Map을 만든다

【경위】



ELK로 오픈 데이터를 시각화하는 사이트를 작성하고 있습니다.
지도에 데이터를 그래프로 표시하고 싶고, Kibana의 Coordinate Map을 사용하려고 생각했지만, 예상외로 고전했습니다.
비망을 겸해 투고합니다.
덧붙여서 Map 이미지는 이런 느낌입니다.


【Kibana의 지도에 대해서】



Kibana에서는 맵이 2종류 있습니다.
・Region Map:지정한 지구의 영역을 색칠해 표시한다.
· Coodinate Map : 지정된 위도 경도의 포인트에 메트릭을 표시합니다.

Redion Map에 대해서는 이하의 사이트가 참고가 됩니다.
Kibana 5.5.0의 새로운 기능 Region Map을 사용해 보았습니다.
Region Map에서 도도부 현 데이터를 그려 보았습니다.

이 게시물에서는 Coodinate Map을 다루고 싶습니다.

【환경】



OS: Amazon Linux 2
데이터베이스: Elasticsearch 7.1
데이터 투입: Logstash 7.1
데이터 시각화: Kibana 7.1

※주의:본 투고는 ELK7계에서의 순서입니다. 다른 버전에서는 아마 다른 설정·순서가 될까 생각하므로 유의해 주십시오.

【작업 순서】



전체 작업 흐름


  • CSV 파일 준비
  • Logstash conf 파일 만들기
  • index template 설정
  • logstash로 csv 데이터 가져 오기
  • kibana에서 Coordinate Map 만들기

  • 그러면 구체적인 절차가 아래에 나와 있습니다.

    1. CSV 파일 준비



    먼저 CSV 파일을 준비합니다.

    sample.csv
    id,nengetsu,chiku,gyorui,kairui,sonota,sourui,sousuu,kingaku,lat,lon  #←この行は削除すること
    ID,年月,市町村名,魚類,貝類,その他,藻類,総数,漁獲金額,緯度,経度 #←この行は削除すること
    1,2018-01-01,深浦町,220201,278,87827,930,309236,199231,40.650993,139.929676
    2,2018-01-01,鰺ヶ沢町,82891,16,64543,27,147477,80995,40.778099,140.220862
    3,2018-01-01,つがる市,2185,0,688,0,2873,1690,40.882709,140.2922
    (以下省略)
    

    선두의 2행은 설명을 위해서 표기하고 있습니다. 실제 CSV에서는 처음 두 줄을 삭제하십시오.

    2. Logstash conf 파일 만들기



    Logstash에서 CSV 데이터를 가져오려면 다음과 같은 conf 파일을 준비합니다.

    sample.conf
    input {
        file {
            path => ["/etc/logstash/conf.d/sample.csv"]
            start_position => "beginning"
            sincedb_path => "/dev/null"
        }
    }
    
    filter {
        csv {
            columns => ["id","nengetsu","chiku","gyorui","kairui","sonota","sourui","sousuu","kingaku","latitude","longitude"]
        }
        date {
            match => ["nengetsu", "yyyy-MM-dd"]
        }
        mutate {
          convert => {
            "id" => integer
            "chiku" => string
            "gyorui" => integer
            "kairui" => integer
            "sonota" => integer
            "sourui" => integer
            "sousuu" => integer
            "kingaku" => integer
            "latitude" => "float"
            "longitude" => "float"
          }
    
          add_field => {
              "[location][lat]" => "%{latitude}"
              "[location][lon]" => "%{longitude}"
          }
          convert => {
                "[location][lat]" => "float"
                "[location][lon]" => "float"
          }
        }
    }
    
    output {
        elasticsearch {
            index => "sample"
            document_id => "%{id}"
        }
    }
    

    3. index template 설정



    csv와 conf가 준비된 곳에서 데이터 투입, 가고 싶은 곳입니다만, 투입전에 Elasticsearch에서 index template의 설정이 필요합니다.
    # curl -H 'Content-Type: application/json' -XPUT 'http://localhost:9200/_template/sample' -d '
    {
      "index_patterns": "sample*",
      "mappings": {"properties": {"location": {"type": "geo_point"}}}
    }'
    

    위 명령을 실행하고 "{"acknowledged":true}"라고 표시되면 OK입니다.

    4. logstash로 csv 데이터 가져오기



    그럼 드디어 데이터를 투입합니다.
    먼저 sample.csv와 sample.conf를/etc/logstash/conf.d/에 배포하십시오.
    # pwd
    /etc/logstash/conf.d
    # ls
    sample.conf  sample.csv
    

    그리고 다음 명령으로 실행합니다. 조금 시간이 걸릴 수 있습니다.
    # /usr/share/logstash/bin/logstash -f ./sample.conf
    

    몇 분 정도 시간이 걸릴 수 있습니다.
    [ERROR]가 나오지 않고 [Successfully started Logstash API endpoint]라는 메시지가 나오면 OK입니다.
    ([WARN]은 신경 쓰지 않아도 괜찮습니다.)

    5. Kibana에서 Coordinate Map 만들기



    마지막으로 Kibana에서지도를 만듭니다.

    ① 우선 [Management]의 [index Patterns]에서 index patarn을 작성합니다.

    이름은 "sample*"입니다.
    Time Fileter는 [ @timestamp ]을 선택합니다.




    ② 다음으로 [Visualise]의 신규 작성에서 [Coordinate Map]을 선택하고 [sample*]을 선택합니다.



    ③ [Metrics]와 [Buckets]를 설정합니다.
    또한 오른쪽 상단의 대상 기간을 적절하게 설정하십시오. (기본값으로는 ​​아무것도 표시되지 않을 수 있습니다.)
    설정이 끝나면 삼각형 실행 아이콘을 클릭하면 MAP에 표시됩니다.



    ④ MAP 왼쪽 상단의 중간 아이콘을 클릭하면 딱 좋은 느낌으로 줌 해줍니다.



    뭔가 좋은 느낌으로 표시되었습니다!

    【마지막으로】



    포인트는 logstash로 캡처하기 전에 template를 설정해 두는 것이군요. 이것을 모르고 고전했습니다.
    (logstash의 conf로 geo_point형을 설정할 수 없는가와 여러가지 챌린지 했습니다만, 결국은 template로 해결했습니다.)

    Elastic과 Kibana를 사용하여 작성한 그래프를 다음 사이트에서 공개하고 있습니다.
    관심이 있으시면 살펴보세요.

    아오모리의 통계 데이터를 보자.

    좋은 웹페이지 즐겨찾기