2017-02-22 34 views
1

我想玩與graylog的mongo探查器插件使用碼頭運行的一切。但是我無法將任何分析日誌記錄到graylog中。Graylog2 mongo探查器插件不會連接到mongo實例,錯誤:「異常打開套接字」(一切dockerized)

當我開始從graylog UI蒙戈輸入它最終超時併產生錯誤:

Timed out after 30000 ms while waiting for a server that matches WritableServerSelector. Client view of cluster state is {type=UNKNOWN, servers=[{address=localhost:37017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused}}].


這是基於以下的graylog dockerhub installationmongo profiler plugin guide和修改位我的設置:

(1)我用一個docker-compose文件調出graylog,mongo和elastic:

version: '2' 
services: 
    some-mongo: 
    image: "mongo:3" 
    some-elasticsearch: 
    image: "elasticsearch:2" 
    command: "elasticsearch -Des.cluster.name='graylog'" 
    graylog: 
    image: graylog2/server:2.2.1-1 
    environment: 
     GRAYLOG_PASSWORD_SECRET: somepasswordpepper 
     GRAYLOG_ROOT_PASSWORD_SHA2: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 
     GRAYLOG_WEB_ENDPOINT_URI: http://127.0.0.1:9000/api 
    links: 
     - some-mongo:mongo 
     - some-elasticsearch:elasticsearch 
    ports: 
     - "9000:9000" 
     - "514:514/udp" 
     - "12202:12202" 
     - "37017:37017" 

到目前爲止,這工作得很好,我已經能夠發送syslog udp消息和gelf http消息。

(2)我創建了映射,因爲我擔心如果我用27017,即graylog看起來可能會在其自身的內部MongoDB的集裝箱港口單獨蒙戈泊塢窗容器:

docker run -d -p 37017:27017 mongo:2.4 

我開始蒙戈會話和啓用「graylog」數據庫的分析:

$ mongo --port 37017 
> use graylog 
> db.setProfilingLevel(2) 
{ "was" : 0, "slowms" : 100, "ok" : 1 } 
> db.foo.insert({_id:1}) 

// Check that profiling data is being written to system.profile: 
> db.system.profile.find().limit(1).sort({ ts : -1 }).pretty() 
{ 
    "op" : "query", 
    "ns" : "graylog.foo", 
    "query" : { 

    }, 
    "ntoreturn" : 0, 
    "ntoskip" : 0, 
    .... 
    "allUsers" : [ ], 
    "user" : "" 
} 

所以看起來好像mongod實例正在運行並且分析工作正常。 (3)我將插件jar和docker cp下載到graylog docker容器內的插件目錄中。例如:

docker cp graylog-plugin-mongodb-profiler-2.0.1.jar e89a2decda37:/usr/share/graylog/plugin 

然後重新啓動graylog。

我可以看到文件是存在的:

$ docker exec -it e89a2decda37 /bin/sh 
# ls /usr/share/graylog/plugin 
graylog-plugin-anonymous-usage-statistics-2.2.1.jar graylog-plugin-map-widget-2.2.1.jar 
graylog-plugin-beats-2.2.1.jar    graylog-plugin-mongodb-profiler-2.0.1.jar 
graylog-plugin-collector-2.2.1.jar   graylog-plugin-pipeline-processor-2.2.1.jar 
graylog-plugin-enterprise-integration-2.2.1.jar 

所以這部分似乎正常工作,我可以看到在輸入類型列表中graylog UI中的條目「蒙戈探查輸入」。

(4)創建一個 「蒙戈分析器輸入」 輸入與:

  • 主機名:本地主機
  • 端口:37017
  • 數據庫:graylog

(5)後,我點擊保存,輸入嘗試啓動,然後最終失敗,如上所述。重新啓動Graylog或嘗試重新啓動輸入會導致相同的故障。


我曾嘗試步驟(2)不同版本的蒙戈的情況下,有一些驅動程序不兼容,但他們都失敗,同樣的錯誤。我試過泊塢窗圖片:

  • 蒙戈:3
  • 蒙戈:2。6個
  • 蒙戈:提前2.4

謝謝!

+0

a)您是否還需要與Graylog一起運行的「some-mongo」? b)似乎Graylog試圖使用「localhost」連接到外部Mongo。不知道這是否可以工作,因爲「localhost」會引用它自己的容器。嘗試使用Docker主機的IP地址。 – Thilo

+0

@Thilo a)這就是graylog本身的mongo實例。它在其中存儲了一些元數據。 b)是的,這工作! Danke Thilo! :曲奇餅: – rmin

回答

1

與Thilo建議的above一樣,graylog輸入的主機名不應該爲「localhost」,因爲這會將graylog指向承載它的Docker容器。

所以我找到了主機的IP使用:

docker exec -it [CONTAINER ID] /bin/sh 
/sbin/ip route|awk '/default/ { print $3 }' 

和重新佈線的輸入和鮑勃是你的叔叔!