私はsystemdを使ってubuntu 16.04を実行しているaws ec2インスタンスでlogstashを実行しようとしています。私は英雄工具ベルトを機械に取り付けました。 (bin/logstash.bat経由で)パイプラインを正常に動かすとうまく動作し、イベントが取り込まれます(ただし、数分後に「Request timed out」エラーが発生し、パイプラインが停止します)。ubuntu(logstash 5.2.1)のサービスとして実行中のlogstash-input-heroku
しかし、systemdでサービスを実行しようとすると、エラーが発生します.2種類のエラーが関連しているかどうかはわかりません。最初は、SSLエラーです:
Error: no cipher match (OpenSSL::SSL::SSLError)
[2017-02-15T13:08:44,037][ERROR][logstash.pipeline ] A plugin had an unrecoverable error. Will restart this plugin. Plugin: "xxxxxx", codec=>"^%{TIMESTAMP_ISO8601} %{WORD}\[\w+(\.\d+)?\]:(\s{3,}| \})", what=>"previous", id=>"032c3b317ae49982945ec7e8fbf11224be98f237-3", enable_metric=>true, negate=>false, charset=>"UTF-8", multiline_tag=>"multiline", max_lines=>500, max_bytes=>10485760>, id=>"032c3b317ae49982945ec7e8fbf11224be98f237-4", enable_metric=>true>
は、第二は、Herokuののツールベルトは、資格情報の入力を求めるているように見えるということです。
Feb 15 13:08:43 ip-10-0-1-216 logstash[4402]: Enter your Heroku credentials.
Feb 15 13:08:43 ip-10-0-1-216 logstash[4402]: Email: Password (typing will be hidden):
マイlogstash構成:
input {
heroku {
app => "xxx-1"
codec => multiline {
pattern => "^%{TIMESTAMP_ISO8601} %{WORD}\[\w+(\.\d+)?\]:(\s{3,}| \})"
what => "previous"
}
}
heroku {
app => "xxx-2"
codec => multiline {
pattern => "^%{TIMESTAMP_ISO8601} %{WORD}\[\w+(\.\d+)?\]:(\s{3,}| \})"
what => "previous"
}
}
heroku {
app => "xxx-3"
codec => multiline {
pattern => "^%{TIMESTAMP_ISO8601} %{WORD}\[\w+(\.\d+)?\]:(\s{3,}| \})"
what => "previous"
}
}
heroku {
app => "xxx-4"
codec => multiline {
pattern => "^%{TIMESTAMP_ISO8601} %{WORD}\[\w+(\.\d+)?\]:(\s{3,}| \})"
what => "previous"
}
}
}
filter {
grok {
break_on_match => true
patterns_dir => ["./grok_patterns"]
match => { "message" => [
"^%{TIMESTAMP_ISO8601:timestamp} %{WORD:heroku_source}\[%{DYNO:dyno}\]: %{LEVEL:level}: HTTP %{OPT_NOT_SPACE_COMMA:organization}, %{OPT_NOT_COMMA:user}, %{OPT_NOT_COMMA:device}, %{WORD:method} %{ENDPOINT:endpoint}%{QUERY:query} \[%{INT:responseCode:int}\].*? \(p%{INT:nodeProcess:int}\) \(%{INT:responseTime:int}ms\).*$",
"^%{TIMESTAMP_ISO8601:timestamp} %{WORD:heroku}\[%{WORD:component}\]: at=\w+ method=%{WORD:method} path=\"%{ENDPOINT:endpoint}\??%{QUERY:query}\" .*?fwd=\"%{IP:site_ip}\" dyno=%{DYNO:dyno} .*?service=%{INT:responseTime:int}ms status=%{INT:responseCode:int} bytes=%{INT:sizeBytes:int}.*?$",
"^%{TIMESTAMP_ISO8601:timestamp} %{WORD:heroku_source}\[%{DYNO:dyno}\]: (?<data>.*)"
] }
add_field => { "endpoint_template" => "%{endpoint}" }
}
mutate {
gsub => ["endpoint_template", "[0-9a-f]{24}", "ID"]
add_field => { "type" => "heroku" }
}
if ![heroku_source] {
geoip {
source => "site_ip"
}
mutate {
add_field => { "heroku_source" => "heroku" }
}
}
}
output {
elasticsearch {
hosts => [ "aws-es-endpoint:443" ]
ssl => true
}
}
(私は
私はrootとしてサービスを実行しようとしましたが、結果は同じです。ただ、明確にするために、これは動作します:
/usr/share/logstash/bin/logstash --path.settings /etc/logstash/
をこれがいない間:
sudo systemctl start logstash
これはクリーンprocedures on elastic次logstash 5.2.1のインストールです。 Systemdもtheir proceduresに従って実行されるため、手動で実行するのと同じコマンドが実行されます。 cat logstash.service
出力:
[Unit]
Description=logstash
[Service]
Type=simple
User=logstash
Group=logstash
# Load env vars from /etc/default/ and /etc/sysconfig/ if they exist.
# Prefixing the path with '-' makes it try to load, but if the file doesn't
# exist, it continues onward.
EnvironmentFile=-/etc/default/logstash
EnvironmentFile=-/etc/sysconfig/logstash
ExecStart=/usr/share/logstash/bin/logstash "--path.settings" "/etc/logstash"
Restart=always
WorkingDirectory=/
Nice=19
LimitNOFILE=16384
[Install]
WantedBy=multi-user.target
(私は上記のユーザーおよびグループをコメントアウトするとき、結果は同じです)