# フィールドの特定部分の文字列毎にログ件数をグラフ化する方法

**URL:** <https://discuss.elastic.co/t/topic/184929>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [June 10, 2019, 6:55am UTC](https://discuss.elastic.co/t/topic/184929 "2019-06-10T06:55:42Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![masa](https://avatars.discourse-cdn.com/v4/letter/m/b38774/32.png) [@masa](https://discuss.elastic.co/u/masa)\
**Post date:** [June 10, 2019, 6:55am UTC](https://discuss.elastic.co/t/topic/184929/1 "2019-06-10T06:55:42Z")

</div>

Elasticsearchに以下のようなsyslogのデータを取り込んでいます。  
"message"フィールドの中のname=xxxxx毎のsyslog件数の推移を示す線グラフを作成したいと考えています。  
name=xxxxxには、以下のname=HTTP:DOS:ASTERISK-UPGRD-2以外にも様々な名称のsyslogが出力されています。

このように、フィールドの特定部分の文字列毎のログの件数をグラフ化することは可能でしょうか？

host:  
10.0.0.1  
message:  
RT\_IDP: IDP\_ATTACK\_LOG\_EVENT: IDP: at 1559800784, SIG Attack log \<1.1.1.1/57655-\>2.2.2.2/80\> for TCP protocol and service SERVICE\_IDP application HTTP by rule 3 of rulebase IPS in policy Recommended-copy. attack: id=22097, repeat=0, action=DROP, threat-severity=HIGH, name=HTTP:DOS:ASTERISK-UPGRD-2, NAT \<0.0.0.0:0-\>0.0.0.0:0\>, time-elapsed=0, inbytes=0, outbytes=0, inpackets=0, outpackets=0, intf:Untrust:reth2.0-\>Trust:reth3.0, packet-log-id: 0, alert=no, username=N/A, roles=N/A and misc-message -  
priority:  
info  
facility:  
local7  
@timestamp:  
June 1th 2019, 15:00:00.000  
\_id:  
KZBfK2sBMkAc1ir2TBlh  
\_type:  
fluentd  
\_index:  
logstash-2019.06.01  
\_score:  
-

---

<div class="post-metadata">

**Author:** ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)\
**Post date:** [June 10, 2019, 7:20am UTC](https://discuss.elastic.co/t/topic/184929/2 "2019-06-10T07:20:10Z")

</div>

こんにちわ。

messageの中にある文字列を少し加工して取り込むようにすれば、簡単に実現可能かと思います。

logstashをお使いのようですので、filterでgrokを使って、name=\*\*\*\* の部分を抽出するようにして、  
その部分を別フィールドに入れます。

そして、そのフィールドの値を検索条件、絞り込み条件にすればできるかと思います。

nameのところだけ抜き出す簡単な例です

```ruby
input {
    stdin {}
}

filter {
    grok {
        match => { "message" => "name=%{DATA:forum0610.log.name},"}
    }
}

output {
    stdout {
        codec => rubydebug
    }
}

```

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/a/9/a92a36beb7379efccf435d3603044e9bd55a3d32.png)

---

<div class="post-metadata">

**Author:** ![masa](https://avatars.discourse-cdn.com/v4/letter/m/b38774/32.png) [@masa](https://discuss.elastic.co/u/masa)\
**Post date:** [June 10, 2019, 8:01am UTC](https://discuss.elastic.co/t/topic/184929/3 "2019-06-10T08:01:55Z")

</div>

tsgkdtさん

回答ありがとうございます。

現在の環境では、様々な機種のsyslogをElasticsearchに取り込んでいるため、  
機種毎にフォーマットを変えずに汎用的なフォーマットを使っていました。

ご提案頂いたようにmessageフィールドの文字列を、さらに幾つかのフィールドに分割すればできそうですね。

logstashではなく、fluentdを利用しているのですが、その場合もプラグインなどを利用して同じような処理が  
できるのでしょうか？

---

<div class="post-metadata">

**Author:** ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)\
**Post date:** [June 10, 2019, 8:05am UTC](https://discuss.elastic.co/t/topic/184929/4 "2019-06-10T08:05:56Z")

</div>

fluentdは詳しくないのでわかりませんが、きっとできるはずです。

> **[fluent/fluent-plugin-grok-parser](https://github.com/fluent/fluent-plugin-grok-parser)**
>
> Fluentd's Grok parser. Contribute to fluent/fluent-plugin-grok-parser development by creating an account on GitHub.

仮にfluentdで処理しない場合でも、ElasticsearchにあるIngest nodeの機能を使うことによって、文字列を処理することができます。

今回の場合、grok processorが使えると思います。  
[https://www.elastic.co/guide/en/elasticsearch/reference/master/grok-processor.html](https://www.elastic.co/guide/en/elasticsearch/reference/master/grok-processor.html)

ご参考になれば幸いです。

---

<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 8, 2019, 8:06am UTC](https://discuss.elastic.co/t/topic/184929/5 "2019-07-08T08:06:05Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
