# Problème de merge de logs Postgres

**URL:** <https://discuss.elastic.co/t/probleme-de-merge-de-logs-postgres/88822>\
**Category:** Discussions en français\
**Created:** [June 9, 2017, 10:11am UTC](https://discuss.elastic.co/t/probleme-de-merge-de-logs-postgres/88822 "2017-06-09T10:11:06Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![jstn](https://avatars.discourse-cdn.com/v4/letter/j/5f9b8f/32.png) [@jstn](https://discuss.elastic.co/u/jstn)\
**Post date:** [June 9, 2017, 10:11am UTC](https://discuss.elastic.co/t/probleme-de-merge-de-logs-postgres/88822/1 "2017-06-09T10:11:06Z")

</div>

Bonjour,

Je souhaite indexer les logs Postgres qui sont stockés sur mes différents serveurs. Pour cela j'utilise Rsyslog pour envoyer les logs vers logstash. Les requêtes Postgres sont envoyés sur plusieurs lignes:

> [35-1] 2017-06-09 11:10:18 CEST (548y65f2.b7e9 17) [local] user@postgres LOG: statement: SELECT field1, field2 field3  
> [35-2] #011 FROM table  
> [35-3] .......  
> [35-4] .......

J'ai aussi des logs sur une seul ligne du type:

> [39-1] 2017-06-09 11:10:18 CEST (548y65f2.b7e9 21) [local] user@postgres LOG: duration: 1.451 ms

J’essaye de fusionner les logs via un aggregate filter mais les logs ne sont pas fusionnés comme il faut, la première ligne apparaît toujours 2 fois dans la ligne fusionné et parfois la première ligne apparaît à la fin de ma ligne.

Enfin, Logstash lit les logs au format json à partir d'un fichier dont le format est:

> "path" =\> "/var/log/pg.log",  
> "@timestamp" =\> 2017-06-09T11:10:18.799Z,  
> "Ip" =\> "xxx.xxx.xxx.xxx",  
> "@version" =\> "1",  
> "Level" =\> "info",  
> "Host" =\> "PG",  
> "Pid" =\> "53943",  
> "Facility" =\> "local4",  
> "message" =\> " [39-1] 2017-06-09 11:10:18 CEST (548y65f2.b7e9 21) [local] user@postgres LOG: duration: 1.451 ms",  
> "Source" =\> "pg.PG"

Voici mon fichier de config:

```
input {
        file {
                path => ["/var/log/pg.log"]
                codec => json
        }
}
filter{
        grok {
                match => ["Message", "\[%{INT:Line}-%{INT:Part_of_line}\] %{GREEDYDATA:temp}" ]
        }
        aggregate {
                task_id => "%{Pid}%{Line}"
                code => "
                    map.merge!(event) if map.empty?
                 map['Message'] ||= ''
                 map['Message'] += event.get('temp')
                "
                timeout => 10
                push_map_as_event_on_timeout => true
                timeout_code => "event.tag('aggregated')"
        }

        if "aggregated" not in [tags] {
            drop {}
        }
}
output {
        elasticsearch {
                hosts => ["localhost:9200"]
                index => "logstash-%{+YYYY.MM.dd}"
                template_name => "logevent"
        }
        stdout {
                codec => rubydebug
        }
}

```

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [June 30, 2017, 2:36pm UTC](https://discuss.elastic.co/t/probleme-de-merge-de-logs-postgres/88822/2 "2017-06-30T14:36:18Z")

</div>

Peut-être que @fbaligand pourrait aider ici ?

---

<div class="post-metadata">

**Author:** ![fbaligand](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/fbaligand/32/5657_2.png) [@fbaligand](https://discuss.elastic.co/u/fbaligand)\
**Post date:** [July 1, 2017, 8:49am UTC](https://discuss.elastic.co/t/probleme-de-merge-de-logs-postgres/88822/3 "2017-07-01T08:49:35Z")

</div>

Plusieurs remarques :

- as-tu bien mis l'option `-w 1` au démarrage de Logstash ? (pour s'assurer d'avoir un seul thread)
- Je pense que tu as déjà l'attribut 'Message' dans ton évènement. Du coup, l'instruction `map.merge!(event) if map.empty?` positionne déjà le premier message. Et l'instruction `map['Message'] += event.get('temp')` le double.  
=\> je t'invite à stocker le résultat aggrégé dans un autre champ que Message.  
Après, via un filtre mutate, tu peux éventuellement copier ce nouveau champ vers Message puis supprimer ce nouveau champ.

---

<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 29, 2017, 8:49am UTC](https://discuss.elastic.co/t/probleme-de-merge-de-logs-postgres/88822/4 "2017-07-29T08:49:43Z")

</div>

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