# Logstash.confに引数渡してlogstash起動

**URL:** <https://discuss.elastic.co/t/logstash-conf-logstash/41152>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [February 8, 2016, 12:44am UTC](https://discuss.elastic.co/t/logstash-conf-logstash/41152 "2016-02-08T00:44:45Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![aurantiacus](https://avatars.discourse-cdn.com/v4/letter/a/ebca7d/32.png) [@aurantiacus](https://discuss.elastic.co/u/aurantiacus)\
**Post date:** [February 8, 2016, 12:44am UTC](https://discuss.elastic.co/t/logstash-conf-logstash/41152/1 "2016-02-08T00:44:45Z")

</div>

皆さん、こんにちは。

タイトルの通りlogstashのconfigファイルに引数を渡して  
filterプラグインを制御、実行したいと考えています。

コマンドライン又は別の方法でconfファイルへ引数を渡すことは可能なのでしょうか？  
可能であれば引数の渡し方とconfファイル内の記述例をご提示いただければ嬉しく思います。

例ですが、現在は下記のようにconfを指定し、logstashを起動しています。  
bin\logstash.bat agent -f logstash.conf"

よろしくお願い致します。

---

<div class="post-metadata">

**Author:** ![nxhack](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nxhack/32/3939_2.png) [@nxhack](https://discuss.elastic.co/u/nxhack)\
**Post date:** [February 9, 2016, 3:49am UTC](https://discuss.elastic.co/t/logstash-conf-logstash/41152/2 "2016-02-09T03:49:46Z")

</div>

直接の回答ではないのですが、コミュニティ プラグインで、 environment filter があります。

[https://www.elastic.co/guide/en/logstash/current/plugins-filters-environment.html#plugins-filters-environment](https://www.elastic.co/guide/en/logstash/current/plugins-filters-environment.html#plugins-filters-environment)

環境変数で渡してあげる手もありそうです。

---

<div class="post-metadata">

**Author:** ![johtani](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/johtani/32/44956_2.png) [@johtani](https://discuss.elastic.co/u/johtani)\
**Post date:** [February 22, 2016, 12:55am UTC](https://discuss.elastic.co/t/logstash-conf-logstash/41152/3 "2016-02-22T00:55:43Z")

</div>

「filterプラグインの制御」と言われているのはどんな感じなんでしょうか？  
例えば、configファイルを別々にするという方法ではダメですか？  
引数をどういう形で利用するのかがよくわからないので。

Filterの切り替えなどという意味であれば、configファイルを個別にするのが一つかと。  
あとは、すでに提案がありますが、environment filterの利用もありかと。

あとは、別途、configをテンプレート化しておいて、スクリプト（batファイル）で、  
読み込んだテンプレート化されたconfigから、config文字列を作って、"-e"オプションで、設定を文字列で渡す方法もあるかと。

---

<div class="post-metadata">

**Author:** ![aurantiacus](https://avatars.discourse-cdn.com/v4/letter/a/ebca7d/32.png) [@aurantiacus](https://discuss.elastic.co/u/aurantiacus)\
**Post date:** [February 25, 2016, 3:01am UTC](https://discuss.elastic.co/t/logstash-conf-logstash/41152/4 "2016-02-25T03:01:22Z")

</div>

nxhack様

立て込んでましてお返事遅れました。  
ありがとうございます。

環境変数というのは  
%{host} ※マシン名  
とか、このことでしょうか？

もし任意に  
%{GroupNo}  
などを宣言してconf内で利用できるのであれば  
環境変数を１つの解決策として確認してみたいと思います。

ただ、logstashは個人様のサイトで紹介されている手法を見ながらなので  
使い方の勉強が追い付いていません。  
公式ドキュメントを見てみました。  
見落としがあったかもしれませんが、環境変数の記述を見つけきれませんでした。

可能であれば記述されているURLか  
サンプルコード等ありましたら教えていただけると大変助かります。

順序がおかしくなりましたが、  
今回お伺いしたのは下記のようにPCごとに任意の情報をログ情報に付与し  
elasticsearch側で判別したいためです。  
※任意の情報はレジストリやテキストなど、別の媒体でPC内に保持し、  
logstash起動時にテンプレート化したconfに任意情報を設定したい。

```
 filter {
 	mutate {
 	  add_field => {
 	    "GroupNo" => "%{GroupNo}"
 	  }
 	}
 }
```

---

<div class="post-metadata">

**Author:** ![aurantiacus](https://avatars.discourse-cdn.com/v4/letter/a/ebca7d/32.png) [@aurantiacus](https://discuss.elastic.co/u/aurantiacus)\
**Post date:** [February 25, 2016, 5:59am UTC](https://discuss.elastic.co/t/logstash-conf-logstash/41152/5 "2016-02-25T05:59:00Z")

</div>

Jun Ohtani 様

立て込んでましてお返事遅れました。  
ありがとうございます。

filterプラグインの使いたい内容については[nxhack様]へのレスに書かせてもらいましたが、  
mutateの値をconfigに直接設定ではなく、logstash呼び出し時に動的に値を渡したかったです。

解決策としては  
nxhack様から教えていただいた環境変数か

> あとは、別途、configをテンプレート化しておいて、スクリプト（batファイル）で、  
> 読み込んだテンプレート化されたconfigから、config文字列を作って、"-e"オプションで、設定を文字列で渡す方法もあるかと。

上記内容を試してみたところ  
教えていただいた内容とやり方が違うかもしれませんが、下記方法でやりたいことが出来ました。

```
rem コマンドで logstash.bat "1" で実行

rem 
SET GroupNo=%1

cd "logstash.batがあるディレクトリ"

logstash.bat -e " input {stdin{}} filter {mutate {add_field => {"GroupNo" => %GroupNo%}}} output {stdout {codec =>rubydebug }}"

```

上記スクリプトで

```
io/console not supported; tty will not be manipulated
Logstash startup completed
test
{
       "message" => "test\r",
      "@version" => "1",
    "@timestamp" => "2016-02-25T03:19:20.056Z",
          "host" => "sample",
       "GroupNo" => "1"
}

```

という結果を得られました。

本来は、  
"input ～～～～rubydebug }}"  
の部分をconfigファイルとして別に管理したかったのですが、  
その形にして、スクリプトから読み込み実行すると下記エラーがでます。  
`Error: Expected one of #, ", ', -, [, { at line 1, column 61 (byte 61) after filter { mutate { add_field => { test =>`

もう少し試してみようかと思います。

---

<div class="post-metadata">

**Author:** ![aurantiacus](https://avatars.discourse-cdn.com/v4/letter/a/ebca7d/32.png) [@aurantiacus](https://discuss.elastic.co/u/aurantiacus)\
**Post date:** [February 25, 2016, 9:58am UTC](https://discuss.elastic.co/t/logstash-conf-logstash/41152/6 "2016-02-25T09:58:59Z")

</div>

実現したい形に近づいたのですが、上手くいかなかったので  
整理も兼ねて具体的に説明と質問をしたいと思います。

現在の環境はlogstash実行batを実行してlogstashを起動しています。

logstash実行bat  
`bin/logstash.bat agent -f logstash.config`

logstash.config

```
input{
file など
}

filter{
  mutate{
    add_field => {
      "GroupID" => aaaa-bb
      "GroupNo" => 1
    }
  }
}

output{
file など
}

```

実現したいポイントは  
**logstash.config内のmutateでadd\_fieldしている**  
**GroupNoの値をconfigファイル内に直接記述するのではなく**  
**今の提案でいうところの環境変数を記述し、設定値を固定化したい。**  
**イメージとしてはconfigファイルで**  
**"GroupNo" =\> 環境変数**  
というようにしたい。

理由は  
**サーバ上で管理しているlogstash.configの内容を変更したら**  
**全PCにlogstash.configを配布上書きし、同じ設定を反映させたいためです。**

ただし、そのまま上書きしてしまうと  
PC個別に管理している"GroupNo"の値も上書きされてしまうため、  
上書きされても問題がないよう、  
レジストリなどで別管理している"GroupNo"の値を設定したいためです。  
※configファイルの"GroupNo"ごとに個別管理は運用上無理がある。

もしこれを実現できるのが「 **環境変数** 」であれば  
やり方をお教えいただければと思います。

現在Windows上で行っているのですが  
環境変数がWindowsの環境変数なのか、違う環境変数のことなのかもわかっていません。

お手数かけますが、よろしくお願いします。

---

<div class="post-metadata">

**Author:** ![nxhack](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nxhack/32/3939_2.png) [@nxhack](https://discuss.elastic.co/u/nxhack)\
**Post date:** [March 3, 2016, 7:34am UTC](https://discuss.elastic.co/t/logstash-conf-logstash/41152/7 "2016-03-03T07:34:36Z")

</div>

コードは無検証ですが、ruby filter を使うのはどうでしょうか。

> ```
> ruby {
> code => "
> require 'win32/registry'
> 
> ```

> ```
> key = 'Software\aurantiacus\somevalue' 
> reg = Win32::Registry::HKEY_LOCAL_MACHINE.open(key) 
> event['GroupID'] = reg["GroupID"] 
> event['GroupNo'] = reg["GroupNo"] 
> "
> }
> 
> ```

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 6, 2017, 1:49pm UTC](https://discuss.elastic.co/t/logstash-conf-logstash/41152/8 "2017-07-06T13:49:15Z")

</div>


