Javaが吐いている「Shift_JIS + \r改行」のファイルをElasticsearchに取り込むと文字化けしてしまいます。
環境としては以下のとおりです。
Windowsサーバ上で
対象のファイルが出力されている
Filebeatを導入して、Logstashサーバに送っている
Logstashで
inputで charset => "Shift_JIS"
及び charset => "CP932"
としても、文字化けして登録される
対象のファイルはnkf等で確認しすると Shift_JIS(改行は\n) で、Windowsのメモ帳でみると「改行がないが文字化けはない」ものです。その為、Shift_JIS(CR+LF) ではなく、Shift_JIS(LF)で間違いないと思います。
以下のような logstashのinput設定をしているのですが、対処方法をおわかりになる方はいらっしゃいますでしょうか。
; codec=>plainなもので入力文字コードを指定すれば、出力時に自動でUTF8に変換される?
input {
beats {
port => "5044"
codec => plain {
charset => "Shift_JIS"
}
}
}
1日調べましたが、事例も見つけられなかったので、こちらで相談させていただきました。
tsgkdt
(tsgkdt)
September 12, 2018, 2:49pm
2
beatsのファイルを読む設定でencodingをshift-jisにしてみてはどうですか?
SJISで改行コードLFのファイルを用意して、やってみたら文字化けせずに入りました。
で、beatsのencoding指定をはずすと文字化けすることも確認しました。
以下、試した設定などを書いておきます。
beatsの設定
- type: log
# Change to true to enable this input configuration.
enabled: true
# Paths that should be crawled and fetched. Glob based paths.
paths:
- Z:\TEMP\*.log
#- c:\programdata\elasticsearch\logs\*
# ↓ 読み込むファイルの文字コードを指定 ↓
encoding: shift-jis
logstashの設定(beatsでshift-jisを設定しただけで、logstashはそのまま)
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => "xxx.xxx.xxx.xxx:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
document_type => "doc"
}
}
テストファイル(改行コードはLF)
あいうえおかきくけこ東京特許許可局
となりの客はよく柿食う客だ
生麦生米なまたまご
インデックスされた例
1 Like
mukai
September 13, 2018, 3:08am
3
「\r」は下記のmutate(汎用文字列加工)フィルター使えば消すことができます。
message項目の「\r」を「」に置換
Mutate filter plugin | Logstash Reference [8.11] | Elastic
filter {
mutate {
gsub => [
"message", "\r", ""
]
}
}
ただ、\rの有無は文字化けには影響しない(データに改行コードが残るだけ)ので、今回の文字化けには関係ないかもしれません。
ありがとうございます。
改行がLFのみなので、\r(CR)は既に存在しません。
また、\nを消してしまうと改行記号がなくなるので、全てが1行になってしまいます。
改行記号だけであれば、文字化けはしませんね。
上記から、今回の用途には合いませんでした。
しかしながら mutate/gsub で文字列置換ができることを初めて知りました。
有用な情報をありがとうございます!
ありがとうございます。
確認までして頂き、大変助かりました。ありがとうございます!
system
(system)
Closed
October 12, 2018, 1:21am
6
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.