在Graylog上构建一个大规模的日志收集环境

必需文件

    • クライアント数は、約2000ノード

 

    • 各ノードから秒間1~2件のログ (5000件/秒程度)

 

    ログの保存期間は2週間

应用程序/中间件

    • Glaylog Server 2.1.1

 

    • MongoDB (v3.0.4を使用)

 

    • Java 1.8.0

 

    • ロードバランサー(lvs, haproxy, nginx等)

 

    • Elasticsearch 2.4.1 (Graylog2.1から2.4系に対応)

 

    Graylog Collector 0.5.0 (0.4系は非対応)

硬件

    • MongoDB …. 3台

 

    • バランサ用サーバ … 1台

 

    • Graylog server … 10台 (12GB memory / 300GB HDD)

 

    Elasticsearch … 200台 (96G memory / 700GB SSD)

构成

各中间件的部署如下所示。官方文档也可以作为参考。以前存在名为Graylog Web interface的GUI,但自从Graylog2开始,已被集成到Graylog Server中。GUI被重写为基于JavaScript,并在客户端上运行(数据本身从API获取)。

graylog.png

关于Mongodb,虽然不需要非常高配的服务器,但是如果Mongo节点出问题,Graylog也会停止运行,所以建议使用推荐的三台配置。

对于Graylog Server和Elasticsesrch,根据请求量每秒和存储期限的不同,需要相应数量的服务器进行扩展。

Graylog服务器的主节点只能设置一台。即使主节点停止,仍然可以接收日志,但无法进行输入添加或其他配置更改。

日志保存数量

由于每秒需要处理的记录数为5000条,每天有86400秒,日志需要保留14天,因此,每一代日志的上限乘以代数必须超过这个数量。

elasticsearch_max_docs_per_index … 每个索引的日志上限
elasticsearch_max_number_of_indices … 最大索引数

此值可以在安装后通过图形用户界面进行更改。

建立ElasticSearch

本次存在200个Elasticsearch节点,考虑冗余性,每个节点最多有2个分片,并且每个分片有2个副本。大约计算出需要120个分片是合适的。 200 * 2 > 120 * 1(主分片) + 120 * 2(副本分片)。

我计划单独撰写一篇关于这个话题的文章。

Graylog 的安装

基本上只需要展开tar文件并修改配置。

让我们来看一下配置文件的每一行。

is_master = true   
   # マスターノードか否か。マルチノードの場合、1台だけtrueに設定する

password_secret = xxxxx  
   # mkpasswd などで生成する

root_password_sha2 = xxxx 
   # echo -n "password" | sha256sum などで生成

rest_listen_uri = http://xxx.xxx.xxx.xxx:9000/api/
web_listen_uri = http://xxx.xxx.xxx.xxx:9000/
web_endpoint_uri = /api/
   # ListenするIPを書く。0.0.0.0ではなく、IPアドレスを指定する。
   # GUIとRestAPIのポートは分けても良いし、同じにしてもよいですが、同じ場合は、URLで分けるため、`web_endpoint_uri` を設定する。

elasticsearch_max_docs_per_index = 30000000
elasticsearch_max_number_of_indices = 20
   # 1インデックスあたりのログ上限と、インデックスの世代数を設定(GUIからも変更可能)

elasticsearch_shards = 120
elasticsearch_replicas = 2
elasticsearch_index_prefix = graylog
   # シャードとレプリカの数の設定

elasticsearch_discovery_zen_ping_unicast_hosts = xxx.xxx.xxx.xxx:9300, xxx.xxx.xxx.xxx:9300, xxx.xxx.xxx.xxx:9300
   # elasticsearchのマスターノードの一覧を設定

elasticsearch_node_master = false
elasticsearch_node_data = false
   # Graylogは、内部でElasticSearchのクライアントノードとして動作して、クラスタにJOINするので、両方Falseにする

elasticsearch_transport_tcp_port = 9300
elasticsearch_network_host = 0.0.0.0
   # クライアントノードとして動作する場合、外からの通信も受け入れなくてはいけないので、127.0.0.1ではなく、グローバルでListernする

mongodb_uri = mongodb://xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx/graylog
   # MongoDB 3台分のURL。ポート番号27017は省略可能。

负载均衡器 (fù qì)

中国的翻译:在使用负载均衡器时,建议使用Nginx、HAProxy或LVS。但是,如果需要在UDP上进行负载均衡(例如,需要收集Syslog日志),目前来说,除了LVS之外没有其他选择。理想情况下,负载均衡器本身也应该使用Keepalived等实现冗余备份,但本次只采用了单机配置。

每个Graylog服务器都有一个健康检查内容(/api/system/lbstatus),需要在负载均衡器上进行配置。

如果是使用HAProxy,可以采取以下方式。

Backend web-ui-backend
        option  httpchk GET /system/lbstatus
        server  webui-001  192.168.100.100:9000 check
        server  webui-002  192.168.100.101:9000 check
        server  webui-003  192.168.100.102:9000 check

如果将GUI和API的端口分开,可以按照以下方式进行。

Backend web-ui-backend
        option  httpchk GET /system/lbstatus
        server  webui-001  192.168.100.100:9000 check port 12900
        server  webui-002  192.168.100.101:9000 check port 12900
        server  webui-003  192.168.100.102:9000 check port 12900

总结

通过以上的配置,我们确认可以接收每秒数万条日志。客户端节点数量可以正常运行直到数千个节点。
在此过程中需要注意的是,虽然每条日志的大小也会影响,但它会成为网络流量。实际上,当达到网络上限时,Graylog端的日志会留下索引失败的日志。

广告
将在 10 秒后关闭
bannerAds