Logstash CSV 파일 업로드


(Ellis.K.Issac) #1

안녕하세요
Elastic Logstash를 사용하면서 몇가지 문제가 있습니다.
사용환경은 windows10을 사용하고 있으며
elastic 6.2.2와 6.5.0버전을 바꿔가며 테스트하고 있습니다.
먼저 문제가 무엇인지 설명하고 config파일은 아래에 적어두겠습니다.

  1. CSV파일 업로드 문제 (6.4.0 이상)
    CSV파일 업로드는 6.2.2에서 업로드 하는것은 성공했습니다.
    같은 방법으로 상위 버전에 테스트하니 에러가 발생합니다.
    몇가지 테스트로 에러는 해소했지만 데이터가 등록되지 않는 문제가 발생합니다.

  2. Timestamp 문제
    CSV파일 내부적으로 기록되어있는 시간기록을 업로드하는데 문제가 있습니다.
    ISO8601기준에 맞추면 시간으로 인식하여 업로드 되는것은 확인했습니다.
    그 외에 방법으로는 아무리해도 text로 인식합니다.
    별달리 command창에서는 언급도 없어서 무엇이 문제인지도 확인할 방법이 없습니다.

Logstash Config파일은 다음과 같습니다.

input{
	file{
    	path => "C:\SimDvcLk\tempLog.csv"
		start_position => "beginning"
		sincedb_path => "nul"
	}
}

filter{	
	date{
	    match => ["Time", "EEE MMM dd HH:mm:ss yyyy SS"]
	}

	#Fri Nov 16 10:10:00 2018 20

	csv {
		separator => ","
		columns => ["Time","ControlMode","ActTemp","SetTemp","Output"]
	}

	mutate{convert=>["ControlMode","string"]}
	mutate{convert=>["ActTemp","float"]}
	mutate{convert=>["SetTemp","float"]}
	mutate{convert=>["Output","float"]}
}

output {
	elasticsearch {
		hosts => "http://localhost:9200"
		index => "templog"
	}
stdout {}
}

CSV파일의 양식은 다음과 같습니다.

Time,ControlMode,ActTemp,SetTemp,Output
Fri Nov 16 10:10:00 2018 20,tuning,30,50,100
Fri Nov 16 10:11:00 2018 20,tuning,31,50,100

확인 부탁드립니다.
감사합니다.


(Jongmin Kim) #2

안녕하세요.

filter 내부의 순서가 잘못되었습니다. CSV 로 먼저 필드들을 분리 한 뒤 그 안에 있는 Time 필드를 파싱해야 하는데 date 를 먼저 넣으면 Time 필드가 없기 때문에 (message 필드만 있습니다) 당연히 안됩니다.
그리고 첫 라인은 헤더이니까 스킵 해 주셔야지 안 그러면 필드릉 중 형식이 잘못들어가는 값들이 있어 자동 매핑 생성인 경우 오류가 생길 수 있습니다.

아래처럼 고쳐보세요.

filter{	
  csv {
    separator => ","
    skip_header => true
    columns => ["Time","ControlMode","ActTemp","SetTemp","Output"]
  }
  date{
    match => ["Time", "EEE MMM dd HH:mm:ss yyyy SS"]
  }
	#Fri Nov 16 10:10:00 2018 20

  mutate{convert=>["ControlMode","string"]}
  mutate{convert=>["ActTemp","float"]}
  mutate{convert=>["SetTemp","float"]}
  mutate{convert=>["Output","float"]}
}

(Ellis.K.Issac) #3

정상적으로 등록되고 있습니다
감사합니다