# Problemas con la configuracion geoip

**URL:** <https://discuss.elastic.co/t/problemas-con-la-configuracion-geoip/29365>\
**Category:** Elastic en Español\
**Created:** [September 16, 2015, 6:19am UTC](https://discuss.elastic.co/t/problemas-con-la-configuracion-geoip/29365 "2015-09-16T06:19:45Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![dfaropennetwork](https://avatars.discourse-cdn.com/v4/letter/d/9fc29f/32.png) [@dfaropennetwork](https://discuss.elastic.co/u/dfaropennetwork)\
**Post date:** [September 16, 2015, 6:19am UTC](https://discuss.elastic.co/t/problemas-con-la-configuracion-geoip/29365/1 "2015-09-16T06:19:45Z")

</div>

Buenos días, a ver si me podéis ayudar.

Tengo problemas para configurar la parte de geoip, esto es lo que tengo configurado hasta ahora:

**FIltro para geoip de logstash**

filter {  
if [type] == "apache\_access" {  
grok {  
match =\> {"message" =\> "%{COMBINEDAPACHELOG}" }  
}  
geoip {  
source =\> "clientip"  
target =\> "geopoint"  
database =\> "/etc/logstash/GeoLiteCity.dat"  
add\_field =\> ["[geoip][coordinates]", "%{[geoip][longitude]}" ]  
add\_field =\> ["[geoip][coordinates]", "%{[geoip][latitude]}" ]  
}  
mutate {  
convert =\> ["[geoip][coordinates]", "float" ]  
}  
}  
}

configuracion de salida de logstash

output {  
elasticsearch {  
host =\> "marioneto01"  
cluster =\> "oknels"  
action =\> "index"  
index =\> "logstash-%{+dd.MM.YYYY}"  
}  
stdout { codec =\> rubydebug }

También tengo creado un index (no lo estoy usando) pero no se muy bien donde está ubicado ya que lo cree mediante el plugin koft.

---

<div class="post-metadata">

**Author:** ![dfaropennetwork](https://avatars.discourse-cdn.com/v4/letter/d/9fc29f/32.png) [@dfaropennetwork](https://discuss.elastic.co/u/dfaropennetwork)\
**Post date:** [September 16, 2015, 6:22am UTC](https://discuss.elastic.co/t/problemas-con-la-configuracion-geoip/29365/2 "2015-09-16T06:22:52Z")

</div>

Aqui pongo mis mapeos para el apache\_access:

{  
"logstash-15.09.2015" : {  
"mappings" : {  
"apache\_access" : {  
"dynamic\_templates" : [ {  
"message\_field" : {  
"mapping" : {  
"index" : "analyzed",  
"omit\_norms" : true,  
"type" : "string"  
},  
"match" : "message",  
"match\_mapping\_type" : "string"  
}  
}, {  
"string\_fields" : {  
"mapping" : {  
"index" : "analyzed",  
"omit\_norms" : true,  
"type" : "string",  
"fields" : {  
"raw" : {  
"index" : "not\_analyzed",  
"ignore\_above" : 256,  
"type" : "string"  
}  
}  
},  
"match" : "\*",  
"match\_mapping\_type" : "string"  
}  
} ],  
"\_all" : {  
"enabled" : true,  
"omit\_norms" : true  
},  
"properties" : {  
"@source\_host" : {  
"type" : "string",  
"norms" : {  
"enabled" : false  
},  
"fields" : {  
"raw" : {  
"type" : "string",  
"index" : "not\_analyzed",  
"ignore\_above" : 256  
}  
}  
},  
"@timestamp" : {  
"type" : "date",  
"format" : "dateOptionalTime"  
},  
"@version" : {  
"type" : "string",  
"index" : "not\_analyzed"  
},  
"agent" : {  
"type" : "string",  
"norms" : {  
"enabled" : false  
},  
"fields" : {  
"raw" : {  
"type" : "string",  
"index" : "not\_analyzed",  
"ignore\_above" : 256  
}  
}  
},  
"auth" : {  
"type" : "string",  
"norms" : {  
"enabled" : false  
},  
"fields" : {  
"raw" : {  
"type" : "string",  
"index" : "not\_analyzed",  
"ignore\_above" : 256  
}  
}  
},  
"bytes" : {  
"type" : "string",  
"norms" : {  
"enabled" : false  
},  
"fields" : {  
"raw" : {  
"type" : "string",  
"index" : "not\_analyzed",  
"ignore\_above" : 256  
}  
}  
},  
"clientip" : {  
"type" : "string",  
"norms" : {  
"enabled" : false  
},  
"fields" : {  
"raw" : {  
"type" : "string",  
"index" : "not\_analyzed",  
"ignore\_above" : 256  
}  
}  
},  
"file" : {  
"type" : "string",  
"norms" : {  
"enabled" : false  
},  
"fields" : {  
"raw" : {  
"type" : "string",  
"index" : "not\_analyzed",  
"ignore\_above" : 256  
}  
}  
},  
"geoip" : {  
"dynamic" : "true",  
"properties" : {  
"location" : {  
"type" : "geo\_point"  
}  
}  
},  
"host" : {  
"type" : "string",  
"norms" : {  
"enabled" : false  
},  
"fields" : {  
"raw" : {  
"type" : "string",  
"index" : "not\_analyzed",  
"ignore\_above" : 256  
}  
}  
},  
"httpversion" : {  
"type" : "string",  
"norms" : {  
"enabled" : false  
},  
"fields" : {  
"raw" : {  
"type" : "string",  
"index" : "not\_analyzed",  
"ignore\_above" : 256  
}  
}  
},  
"ident" : {  
"type" : "string",  
"norms" : {  
"enabled" : false  
},

He quitado algunos porque no entraban en el post.

Por lo que he leido en otros post debiaria cambiar el "type" del clientip en vez de string por "ip" pero no lo he conseguido.

Alguna idea?

Gracias

---

<div class="post-metadata">

**Author:** ![gmoskovicz](https://avatars.discourse-cdn.com/v4/letter/g/ecae2f/32.png) [@gmoskovicz](https://discuss.elastic.co/u/gmoskovicz)\
**Post date:** [September 17, 2015, 11:46am UTC](https://discuss.elastic.co/t/problemas-con-la-configuracion-geoip/29365/3 "2015-09-17T11:46:18Z")

</div>

Hola!

Veo que en tu indice, el tipo de cient ip es string.

```auto
"clientip" : {
  "type" : "string",
  "norms" : {
  "enabled" : false
  }
}

```

Eso deberia ser un geo point. De todas maneras el indice podría crearse automaticamente para poder probar que logstash funciona correctamente con tu configuración.

Puedes darnos el pattern del CominedApacheLog?:

> [@dfaropennetwork](#):
>
> COMBINEDAPACHELOG

Si podrias incluir tambien algun log de ejemplo eso seria util que para que pudiese crearte un ejemplo de como correctamente configurar esto.

Gracias!

--Gabriel

---

<div class="post-metadata">

**Author:** ![dfaropennetwork](https://avatars.discourse-cdn.com/v4/letter/d/9fc29f/32.png) [@dfaropennetwork](https://discuss.elastic.co/u/dfaropennetwork)\
**Post date:** [September 17, 2015, 12:10pm UTC](https://discuss.elastic.co/t/problemas-con-la-configuracion-geoip/29365/4 "2015-09-17T12:10:51Z")

</div>

Muy buenas, ya he conseguido crear un "index pattern"personalizado, tengo mi template, y al arrancar logstash coge el template, eso lo veo desde el plugin kopf directamente, ahora bien, sigo con los problemas.

Mis mapeos son los siguientes para geoip y para client:

"geoip": {  
"dynamic": "true",  
"properties": {  
"location": {  
"doc\_values": true,  
"type": "geo\_point"  
},  
"longitude": {  
"doc\_values": true,  
"type": "float"  
},  
"latitude": {  
"doc\_values": true,  
"type": "float"  
},  
"ip": {  
"doc\_values": true,  
"type": "ip"  
}  
}  
},

para client ip:

```
"clientip": {
    "doc_values": true,
    "type": "ip"
  },

```

Pero continuo sin ver la parte de geoip dentro de kibana, he regenerado el index y me aparecen los nuevos "filtros"

Esta es mi configuracion en logstash para apache

filter {  
if [type] == "apache\_error" {  
grok {  
pattern =\> "%{COMBINEDAPACHELOG}"  
add\_field =\> ["received\_from", "%{host}"]  
}  
}  
}  
filter {  
if [type] == "apache\_access" {  
grok {  
match =\> {"message" =\> "%{COMBINEDAPACHELOG}" }  
}  
geoip {  
source =\> "clientip"  
target =\> "geoip"  
database =\> "/etc/logstash/GeoLiteCity.dat"  
add\_field =\> ["[geoip][coordinates]", "%{[geoip][longitude]}" ]  
add\_field =\> ["[geoip][coordinates]", "%{[geoip][latitude]}" ]  
}  
mutate {  
convert =\> ["[geoip][coordinates]", "float" ]  
}  
}  
}  
filter {  
if [type] == "apache\_access\_ssl" {  
grok {  
match =\> {"message" =\> "%{COMBINEDAPACHELOG}" }  
}  
geoip {  
source =\> "clientip"  
target =\> "geoip"  
database =\> "/etc/logstash/GeoLiteCity.dat"  
add\_field =\> ["[geoip][coordinates]", "%{[geoip][longitude]}" ]  
add\_field =\> ["[geoip][coordinates]", "%{[geoip][latitude]}" ]  
}  
mutate {  
convert =\> ["[geoip][coordinates]", "float" ]  
}  
}  
}

y esta mi configuracion para el output de logstash

output {  
elasticsearch {  
host =\> "marioneto01"  
cluster =\> "oknels"  
protocol =\> "http"  
index =\> "okn-%{+YYYY.MM.dd}"  
template =\> "/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-1.0.5-java/lib/logstash/outputs/elasticsearch/okn-template.json"  
template\_name =\> "okn-\*"  
manage\_template =\> "true"  
#template\_overwrite =\> "true"

}  
stdout { codec =\> rubydebug }  
}

---

<div class="post-metadata">

**Author:** ![dfaropennetwork](https://avatars.discourse-cdn.com/v4/letter/d/9fc29f/32.png) [@dfaropennetwork](https://discuss.elastic.co/u/dfaropennetwork)\
**Post date:** [September 17, 2015, 12:15pm UTC](https://discuss.elastic.co/t/problemas-con-la-configuracion-geoip/29365/5 "2015-09-17T12:15:55Z")

</div>

El pattern del apache es el que viene por defecto:

COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} [%{HTTPDATE:timestamp}] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-)

y una muestra de mi salida de apache:

He cambiado el "usuario" por seguridad pero es correcto.

10.29.0.57 - usuario [17/Sep/2015:14:05:18 +0200] "POST /goknlogs/elasticsearch/\_msearch?timeout=0&ignore\_unavailable=true&preference=1442491467496 HTTP/1.1" 200 47836 "[http://10.29.0.71/goknlogs/](http://10.29.0.71/goknlogs/)" "Mozilla/5.0 (X11; Ubuntu; Linux x86\_64; rv:40.0) Gecko/20100101 Firefox/40.0"

---

<div class="post-metadata">

**Author:** ![gmoskovicz](https://avatars.discourse-cdn.com/v4/letter/g/ecae2f/32.png) [@gmoskovicz](https://discuss.elastic.co/u/gmoskovicz)\
**Post date:** [September 17, 2015, 12:40pm UTC](https://discuss.elastic.co/t/problemas-con-la-configuracion-geoip/29365/6 "2015-09-17T12:40:51Z")

</div>

Hola nuevamente!

Pues he probado localmente utilizando la ultima version de la [database de ips](http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz) y estoy obteniendo los resultados correctamente desde mi localidad:

```auto
"geoip" => {
                      "ip" => "167.56.12.-",
           "country_code2" => "UY",
           "country_code3" => "URY",
            "country_name" => "Uruguay",
          "continent_code" => "SA",
             "region_name" => "10",
               "city_name" => "Montevideo",
                "latitude" => -,
               "longitude" => -,
                "timezone" => "America/Montevideo",
        "real_region_name" => "Montevideo",
                "location" => [
            [0] -,
            [1] -
        ]

```

He borrado los datos por seguridad.

Por otro lado, intente con la IP que tu me mandaste, 10.29.0.57 y no es capaz de ubicar esta localidad. Tal vez esta sea una IP interna no una IP publica? Para poder utilizar GeoIps tienes que proveer la IP publica de tus servidores, no la ip privada. Tal vez puedas utilizar el filtro `translate` para traducir tus IPs por la IP publica de ellos.

De todas maneras puede que tambien tengas algun problema con el `add_field` y el `mutate`. Las coordenadas deberian de estar automaticamente resueltas por el filtro geoip, y encontrarias en [geopoint] field la informacion necesaria para tu solucion. Como en el ejemplo que adjunte.

Por favor, dime si esto aclara un poco el problema que estas teniendo.

Gracias!

--Gabriel

---

<div class="post-metadata">

**Author:** ![dfaropennetwork](https://avatars.discourse-cdn.com/v4/letter/d/9fc29f/32.png) [@dfaropennetwork](https://discuss.elastic.co/u/dfaropennetwork)\
**Post date:** [September 17, 2015, 1:14pm UTC](https://discuss.elastic.co/t/problemas-con-la-configuracion-geoip/29365/7 "2015-09-17T13:14:32Z")

</div>

Gracias por contestar tan rápido.

Sí, es una ip privada, lo uso así porque estoy probando con una máquina virtual sin ip pública por no probarlo en producción o crear una máquina en la nube para esto, de todas formas entiendo que aunque sea una ip privada debería aparecer el filtro en kibana.

Otra pregunta, ¿es obligatorio tener configurado el modulo para geoip en apache? entiendo que no ya que esto va por otro lado aunque si que coja la ip de los logs de apache, debería contrastarlo con la base de datos de GEOIP.

Si te sirve de información los filtros en kibana aparecen con un ckeck en el "index" pero no en "analyzed"

---

<div class="post-metadata">

**Author:** ![gmoskovicz](https://avatars.discourse-cdn.com/v4/letter/g/ecae2f/32.png) [@gmoskovicz](https://discuss.elastic.co/u/gmoskovicz)\
**Post date:** [September 17, 2015, 1:20pm UTC](https://discuss.elastic.co/t/problemas-con-la-configuracion-geoip/29365/8 "2015-09-17T13:20:52Z")

</div>

La ip deberia de aparecer, ya que el output deberia de ser algo similar a:

```auto
{
        "message" => "10.29.0.57 - - [05/Feb/2012:17:11:55 +0000] \"GET / HTTP/1.1\" 200 140 \"-\" \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.5 Safari/535.19\"",
       "@version" => "1",
     "@timestamp" => "2015-09-17T12:35:43.909Z",
           "host" => "Gabriels-MacBook-Pro.local",
       "clientip" => "10.29.0.57",
          "ident" => "-",
           "auth" => "-",
      "timestamp" => "05/Feb/2012:17:11:55 +0000",
           "verb" => "GET",
        "request" => "/",
    "httpversion" => "1.1",
       "response" => "200",
          "bytes" => "140",
       "referrer" => "\"-\"",
          "agent" => "\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.5 Safari/535.19\""
}

```

Lo que no deberia de aparecer, son las coordenadas.

No me queda claro tu segunda consulta:

> Otra pregunta, ¿es obligatorio tener configurado el modulo para geoip en apache? entiendo que no ya que esto va por otro lado aunque si que coja la ip de los logs de apache, debería contrastarlo con la base de datos de GEOIP.

En realidad una IP privada nunca va a ser interpretada por la base de datos de GEOIp porque no va a saber donde esta hubicada. Quiere decir que cuanto utilizas GeoIps o bien pasas la ip publica, o sino no hay otra manera que utilizar simplemente el `clientip` en tu caso, que contiene la ip de donde estos logs estan viniendo. Yo diria que el client up deberia de estar presente en kibana funcione o no esto.

Saludos!

--Gabriel

---

<div class="post-metadata">

**Author:** ![dfaropennetwork](https://avatars.discourse-cdn.com/v4/letter/d/9fc29f/32.png) [@dfaropennetwork](https://discuss.elastic.co/u/dfaropennetwork)\
**Post date:** [September 17, 2015, 1:31pm UTC](https://discuss.elastic.co/t/problemas-con-la-configuracion-geoip/29365/9 "2015-09-17T13:31:46Z")

</div>

Por fin!! quitando los field y los mutate en logstash de la parte de geoip y borrando el "index" nuevamente y volviendolo a crear ahora sí me aparecen los filtros correctos en kibana:

tgeoip.continent\_code --  
geoip.country\_code 0  
tgeoip.country\_code2 --  
tgeoip.country\_code3 --  
tgeoip.country\_name N/A  
geoip.ip 10.29.0.57

Eso sí, tuve que crear mi propio template para cambiar el "type" de client ip de string a "ip" sino no funcionaba, muchas muchas gracias gmoskovicz, si te parece podria poner por aquí como he configurado el template y demás que no hay nada en castellano y es "algo" confuso.

---

<div class="post-metadata">

**Author:** ![gmoskovicz](https://avatars.discourse-cdn.com/v4/letter/g/ecae2f/32.png) [@gmoskovicz](https://discuss.elastic.co/u/gmoskovicz)\
**Post date:** [September 17, 2015, 1:34pm UTC](https://discuss.elastic.co/t/problemas-con-la-configuracion-geoip/29365/10 "2015-09-17T13:34:02Z")

</div>

No es nada. Un placer ayudarte.

Por favor, si puedes incluye una descripcion de lo que te sucedia asi otros usuarios podrian verlo en un futuro.

Gracias y Saludos,

--Gabriel

---

<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:51pm UTC](https://discuss.elastic.co/t/problemas-con-la-configuracion-geoip/29365/11 "2017-07-06T13:51:09Z")

</div>


