先看看推荐!国外程序员整理的系统管理员资源大全中,国外程序员整理的日志聚合工具的列表:
日志管理工具:收集,解析,可视化
- Elasticsearch – 一个基于Lucene的文档存储,主要用于日志索引、存储和分析。
- Fluentd – 日志收集和发出
- Flume -分布式日志收集和聚合系统
- Graylog2 -具有报警选项的可插入日志和事件分析服务器
- Heka -流处理系统,可用于日志聚合
- Kibana – 可视化日志和时间戳数据
- Logstash -管理事件和日志的工具
- Octopussy -日志管理解决方案(可视化/报警/报告)
一、Graylog介绍
Graylog是强大的日志管理、分析工具。它基于 Elasticsearch, Java和MongoDB。
Graylog可以收集监控多种不同应用的日志。但是为了示范说明,我只收集syslog。并且,我将会把用到的组件全部安装到一个单独的服务器上。对于大型、生产系统你可以把组件分开安装在不同的服务器上,这样可以提高效率。
Graylog有4个基本组件:
Graylog Server:这个服务负责接收和处理日志/消息,并且和其他组件沟通。
Elasticsearch:存储所有的日志,它的性能依赖内存和硬盘IO。
MongoDB:存储元数据,负载不高。
Web接口:用户接口。
下面是Graylog组件之间的关系图:
二、Docker部署Graylog
首先提供一个docker-compose.yml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
version: '2' services: mongo: image: "mongo:3" volumes: - /graylog/data/mongo:/data/db elasticsearch: image: "elasticsearch:2" command: "elasticsearch -Des.cluster.name='graylog'" volumes: - /graylog/data/elasticsearch:/usr/share/elasticsearch/data graylog: image: graylog2/server:2.1.0-3 volumes: - /graylog/data/journal:/usr/share/graylog/data/journal #- /graylog/config:/usr/share/graylog/data/config environment: GRAYLOG_PASSWORD_SECRET: somepasswordpepper GRAYLOG_ROOT_PASSWORD_SHA2: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 GRAYLOG_WEB_ENDPOINT_URI: http://10.106.201.11:9000/api/ depends_on: - mongo - elasticsearch ports: - "9000:9000" - "12201/udp:12201/udp" - "12202/udp:12202/udp" |
注意,这里的12201和12202是用来提供给客户端打日志的端口,所以后面设置了多少个INPUT,这里就需要开启多少个端口。
启动graylog
1 2 3 4 |
$ docker-compose -p panop up -d Creating panop_mongo_1 Creating panop_elasticsearch_1 Creating panop_graylog_1 |
1 2 3 4 5 |
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cacb9c4a58fb graylog2/server:2.1.0-3 "/docker-entrypoint.s" 5 minutes ago Up 5 minutes 0.0.0.0:12201->12201/udp, 0.0.0.0:12202->12202/udp, 0.0.0.0:9000->9000/tcp, 12900/tcp panop_graylog_1 4003904aaa40 elasticsearch:2 "/docker-entrypoint.s" 5 minutes ago Up 5 minutes 9200/tcp, 9300/tcp panop_elasticsearch_1 4a6276d52bd4 mongo:3 "/entrypoint.sh mongo" 5 minutes ago Up 5 minutes 27017/tcp panop_mongo_1 |
当graylog启动完成后,我们需要把配置文件复制出来,放到宿主机中,然后再通过挂在的方式挂在到容器中,这样就可以修改配置文件了。
1 2 3 4 5 |
$ docker exec -ti root_graylog_1 bash root@e76f6e178420:/usr/share/graylog# pwd /usr/share/graylog root@e76f6e178420:/usr/share/graylog# ls data/config/ graylog.conf log4j2.xml node-id |
就是把这三个文件复制出来,然后放到本地/data/config目录下。
1 2 |
$ ls /data/config graylog.conf log4j2.xml node-id |
然后把docker-compose文件中的graylog挂载的注释去掉,然后重新docker-compose up -d操作。
1 |
#- /graylog/config:/usr/share/graylog/data/config |
三、时区和高亮显示
修改graylog.conf配置文件的默认时区(UTC)为(Asia/Shanghai)
1 |
root_timezone = Asia/Shanghai |
搜索高亮显示
1 |
allow_highlighting = true |
四、登录Graylog Web
访问:http://10.106.201.11:9000,默认用户名密码admin/admin。
登录之后界面如下:
添加要接收的其他服务器syslog日志:System->Inputs->Syslog UDP->Launch new input。
在弹出的窗口上输入如下信息:
Title: udp
Port: 12202
Bind address: 0.0.0.0(要收集的其他服务器ip地址)
如果你需要收集多个服务器的日志,重复上面步骤。
五、接收日志配置
现在,我们的Graylog服务器已经做好了接收其他服务器发来日志的准备。下面我们还需要配置其他服务器,让这些服务器给Graylog服务器发送日志。
配置其他服务器给Graylog服务器发送syslog,创建rsyslog配置文件90-graylog.conf:
1 |
$ sudo vim /etc/rsyslog.d/90-graylog.conf |
添加如下代码,把graylog_server_IP替换为Graylog服务器ip地址:
1 2 |
$template GRAYLOGRFC5424,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msg%\n" *.* @graylog_server_IP:12202;GRAYLOGRFC5424 |
重启rsyslog服务使生效:
1 |
$ sudo systemctl restart rsyslog |
配置完成之后,回到Graylog Web,点击Sources,查看是否有新添加rsyslog。
然后登陆一下此服务器产生一些登陆日志,然后回到Graylog,在search页面就可以看到如下日志信息了。
可以看到graylog的日志信息跟/var/log/secure日志信息是一样的。
1 2 3 4 5 6 |
[root@testpanoplog-hzba-1 ~]# tail -n 5 /var/log/secure Jan 3 14:12:30 testpanoplog-hzba-1 sshd[13090]: Accepted password for root from 10.0.8.134 port 30542 ssh2 Jan 3 14:12:30 testpanoplog-hzba-1 sshd[13090]: pam_unix(sshd:session): session opened for user root by (uid=0) Jan 3 14:12:30 testpanoplog-hzba-1 sshd[13090]: pam_lastlog(sshd:session): unable to open /var/log/lastlog: No such file or directory Jan 3 14:12:30 testpanoplog-hzba-1 sshd[13094]: lastlog_openseek: Couldn't stat /var/log/lastlog: No such file or directory Jan 3 14:12:30 testpanoplog-hzba-1 sshd[13094]: lastlog_openseek: Couldn't stat /var/log/lastlog: No such file or directory |