graylog 升级2.1 集中日志解决方案

Posted by Yancy on 2016-11-14

graylog 升级2.1 集中日志解决方案

参考官网:升级到Graylog的2.1.x

一:为什么需要集中日志解决方案?

在公司服务机子部署越来越多的情况下,让我们来想想会遇到的问题:

  • 开发人员不能登录线上服务器查看详细日志,经过运维周转费时费力
  • 日志数据分散在多个系统,难以查找
  • 日志数据量大,查询速度慢
  • 一个调用会涉及多个系统,难以在这些系统的日志中快速定位数据
  • 数据不够实时
  • 很难对数据进行挖掘,分析,业务告警,审计
  • 这些问题的存在让开发以及运维人员很是头痛,严重影响效率!

二:什么是graylog技术栈?

为了解决上述问题,我们需要一个日志的集中管理方案,graylog技术栈:

  • java (jdk1.8.0_66/)环境
  • Collector-sidecar(收集日志)或者syslog
  • Mongodb(存储日志源文件)
  • Elasticsearch(提供搜索日志)
  • Graylog2.1.1(搜索和视图展示日志,告警和权限)

有了这些,我们就能把日志先收集起来,进行我们想要的分析之后,web的形式展示出来,提供查询!

三:graylog的安装部署

安装环境:linux centOS系统安装,已安装JDK1.8版本,安装启动顺序

1.安装部署mongodb
2.安装部署elasticsearch
3.安装部署graylog
4.安装部署Graylog Collector Sidecar


1:安装部署mongodb Java也安装 参考我博文有介绍。

2:安装部署elasticsearch

(1)下载jar包

1
2
3
4
5
6
7
8
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.5/elasticsearch-2.3.5.tar.gz
如果报错
执行
wget --no-check-certificate
https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.5/elasticsearch-2.3.5.tar.gz

(2)解压jar包

1
tar -zxvf elasticsearch-2.3.5.tar.gz -C /opt/

(3)修改elasticsearch.yml配置文件

这里需要修改配置文件:配置前先创建几个目录文件

1
2
mkdir /home/data/es-data -p
mkdir /home/data/es-work -p

elasticsearch-2.3.5安装目录conf下执行

1
2
3
4
5
6
7
8
9
10
11
vim elasticsearch-2.3.5/config/elasticsearch.yml
cluster.name: graylog #集群名称建议命名graylog,便于识别区分
node.name: elasticsearch-node-1 # elasticsearch集群节点名称
network.host: 192.168.1.234 # 绑定节点IP
http.port: 9200 # 外部访问端口,默认,也可以安全考虑修改
path.logs: /home/data/logs
path.data: /home/data/es-data
discovery.zen.ping.multicast.enabled: false #多播发现方式关闭,因为graylog采用单播方式发现elasticsearch集群方式
discovery.zen.ping.unicast.hosts #多个节点用逗号隔开
discovery.zen.minimum_master_nodes: 3 # elasticsearch集群节点,最少选举数,这个数一定要设置为整个集群节点个数的一半加1,即N/2+1,必须为奇数

(4)启动elasticsearch服务

新建一个elasticsearch用户,出于安全考虑,elasticsearch服务不能使用root用户启动

创建elasticsearch用户组及elasticsearch用户,执行

1
2
groupadd elasticsearch
useradd elasticsearch -g elasticsearch -p elasticsearch

其中-g使用户属于某个组,-p为新用户使用加密密码)
更改elasticsearch-2.3.5文件夹及内部文件的所属用户及组为elasticsearch:elasticsearch

1
2
chown -R elasticsearch:elasticsearch /home/data/
chown -R elasticsearch:elasticsearch elasticsearch-2.3.5

切换用户

1
su elasticsearch

在elasticsearch-2.3.5/bin目录下执行

1
2
3
4
[elasticsearch@graylog bin]$ ps -ef | grep elasticsearch
root 18265 16004 0 14:27 pts/1 00:00:00 su elasticsearch
502 18405 1 62 14:27 pts/1 00:00:13 /srv/jdk1.8.0_66/bin/java -Xms256m -Xmx1g -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -Dfile.encoding=UTF-8 -Djna.nosys=true -Des.path.home=/opt/elasticsearch-2.3.5 -cp /opt/elasticsearch-2.3.5/lib/elasticsearch-2.3.5.jar:/opt/elasticsearch-2.3.5/lib/* org.elasticsearch.bootstrap.Elasticsearch start -d
502 18530 18266 0 14:27 pts/1 00:00:00 grep --color=auto ela

(5)检查elasticsearch服务状态

执行如下命令测试Elasticsearch是否正常运行:

$ curl -XGET ‘http://localhost:9200/_cluster/health?pretty=true

输出的信息如下表示Elasticsearch安装成功:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[elasticsearch@graylog bin]$ curl -XGET 'http://192.168.1.234:9200/_cluster/health?pretty=true'
{
"cluster_name" : "graylog",
"status" : "yellow",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 30,
"active_shards" : 30,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 30,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 50.0
}

3:安装部署graylog-2.1版本

(1)下载安装包

1
wget https://packages.graylog2.org/releases/graylog/graylog-2.1.1.tgz

(2)解压安装包

1
tar -zxvf graylog-2.1.1.tgz -C /opt/.

(3)修改配置文件

修改安装目录下 graylog.conf.example 文件

1
vim graylog.conf.example

web_listen_uri 值是graylog启动成功后,web服务访问地址

1
web_listen_uri = http://192.168.1.234:9000/

rest_listen_uri 的值,是graylog启动成功后,api访问地址

1
rest_listen_uri = http://192.168.1.234:9000/api/

root_timezone = UTC #设置时区,否则默认使用的是UTC时间也就是世界时间 这里是必须改下的,因为后期收集日志显示时间是有变化的。

1
root_timezone = Asia/Shanghai

其中 password_secret 的值用命令生成

1
2
3
4
yum install -y pwgen
pwgen -N 1 -s 96 H1R5v17kWtyDxj2PzxLMxu41D6HDt9JzhfZcj6QlCURVddgkLAdnUmpkdIscmmu4ELKsTrHwKvPmxFKSYyTn0YlqebbpQqyr
password_secret = H1R5v17kWtyDxj2PzxLMxu41D6HDt9JzhfZcj6QlCURVddgkLAdnUmpkdIscmmu4ELKsTrHwKvPmxFKSYyTn0YlqebbpQqyr

其中root_password_sha2 的值使用命令生成

1
2
3
4
5
6
echo -n Ihaozhuo_b313 | sha256sum (这里对密码123456哈希加密)
fc88c28d48b0cb97f3fb5286cc35c520409ef037acd30ec687f0c0bd3d5a5115
root_password_sha2 = fc88c28d48b0cb97f3fb5286cc35c520409ef037acd30ec687f0c0bd3d5a5115

elasticsearch_cluster_name 值必须是elasticsearch配置文件中的cluster_name

1
2
elasticsearch_cluster_name = graylog

elasticsearch_discovery_zen_ping_unicast_hosts 填写elasticsearch地址,如果是多个,用逗号隔开

1
2
elasticsearch_discovery_zen_ping_unicast_hosts = 192.168.1.234:9300

elasticsearch_discovery_zen_ping_multicast_enabled = false 多播模式关闭

由于我们只有一个Elasticsearch shard,需要把elasticsearch_shards参数设置为1:
elasticsearch集群分片数量

1
elasticsearch_shards = 1

elasticsearch绑定的节点IP

1
2
3
299 elasticsearch_network_host = 192.168.1.234
300 elasticsearch_network_bind_host = 192.168.1.234
301 elasticsearch_network_publish_host = 192.168.1.234

mongodb安装服务的ip地址

1
mongodb_uri = mongodb://192.168.1.234/graylog

这里mongodb是安装在我同一台服务器上面的。如果要把mongodb单独服务器跑连接方式配置文件里面也有例子说明:

1
mongodb_uri =mongodb://graylog:123456@160.17.2.251:27017/graylog2 #连接到mongodb的服务器地址为160.17.2.251:27017,账号为graylog,密码为123456 数据库为graylog2

设置告警邮件发送者信息

1
2
3
4
5
6
7
8
9
10
11
# Email transport
transport_email_enabled = false
transport_email_hostname = smtp.exmail.qq.com
transport_email_port = 465
transport_email_use_auth = true
transport_email_use_tls = true
transport_email_use_ssl = true
transport_email_auth_username = chengyangyang@qq.cn
transport_email_auth_password = beneTqq
transport_email_subject_prefix = [graylog]
transport_email_from_email = chengyangyang@qq.cn

(4)复制配置文件

因为graylog安装bin目录下,默认启动配置文件

配置文件路径:/etc/graylog/server/server.conf

所以需要将graylog.conf.example 复制到/etc/graylog/server/目录下,并且改名 server.conf

执行命令:

1
2
mkdir -p /etc/graylog/server/
cp graylog.conf.example /etc/graylog/server/server.conf

(5)启动graylog

在graylog安装bin目录下执行

1
./graylogctl start

查看日志,在graylog安装目录下执行

1
tail -200f /log/graylog-server.log

如果报错:

原因:

在mongodb版本2.6之后,是需要日志journaling设置的,而默认情况下是关闭的

解决办法:

在mongodb启动命令加上 –journal

最后启动命令:

1
./mongod --dbpath=/usr/local/mongodb/data/ --fork --logpath=/usr/local/mongodb/logs --storageEngine=mmapv1 --journal

重启mongodb后,重启graylog服务即可!

(6)启动graylog(报错二)

查看日志,在graylog安装目录下执行

1
2
tail -200f /log/graylog-server.log
1
2
3
4
5
6
7
8
{com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: 拒绝连接}}]}. Waiting for 30000 ms before timing out
2016-11-22 15:10:29,355 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Elastic Beats Input 1.1.1 [org.graylog.plugins.beats.BeatsInputPlugin]
2016-11-22 15:10:29,357 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Collector 1.1.1 [org.graylog.plugins.collector.CollectorPlugin]
2016-11-22 15:10:29,357 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Enterprise Integration Plugin 1.1.1 [org.graylog.plugins.enterprise_integration.EnterpriseIntegrationPlugin]
2016-11-22 15:10:29,358 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: MapWidgetPlugin 1.1.1 [org.graylog.plugins.map.MapWidgetPlugin]
2016-11-22 15:10:29,359 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Pipeline Processor Plugin 1.1.1 [org.graylog.plugins.pipelineprocessor.ProcessorPlugin]
2016-11-22 15:10:29,359 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Anonymous Usage Statistics 2.1.1 [org.graylog.plugins.usagestatistics.UsageStatsPlugin]
2016-11-22 15:10:29,487 INFO : org.graylog2.bootstrap.CmdLineTool - Running with JVM arguments: -Djava.library.path=./../lib/sigar -Xms1g -Xmx1g -XX:NewRatio=1 -XX:+ResizeTLAB -XX:+UseConcMarkSweepGC -XX:+CMSConcurrentMTEnabled -XX:+CMSClassUnloadingEnabled -XX:+UseParNewGC -XX:-OmitStackTraceInFastThrow

提示mongodb 拒绝连接。 这个时候需要看下端口地址是否是IP地址还是127.0.0.1 如果不是需要修改下在重启服务就可以了。

查看启动服务端口:

1
2
3
4
5
6
7
8
9
10
11
12
[root@graylog graylog-2.1.1]# netstat -ntulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 22308/mongod
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1974/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1287/master
tcp 0 0 ::ffff:192.168.1.234:9350 :::* LISTEN 23642/java
tcp 0 0 ::ffff:192.168.1.234:9000 :::* LISTEN 23642/java
tcp 0 0 ::ffff:192.168.1.234:9200 :::* LISTEN 18405/java
tcp 0 0 ::ffff:192.168.1.234:9300 :::* LISTEN 18405/java
tcp 0 0 :::22 :::* LISTEN 1974/sshd
tcp 0 0 ::1:25 :::* LISTEN 1287/master

(6)访问graylog

graylog启动成功后,浏览器访问:graylog安装IP:9000

四:总结

到此,基础的集中日志管理graylog安装完毕!,后续将继续介绍:

安装部署Graylog Collector Sidecar 收集应用日志

采用syslog收集日志方式

graylog一些使用,包括日志截取,告警等。

之前也实践过ELK技术栈,后来选型graylog,是基于graylog带有的权限管理,和告警功能比较完善!