在CentOS 6上安装Graylog Server 1.x
安装Graylog2日志管理平台以收集,索引和分析数据。
Graylog 1.3.x被称为Graylog2.
请检查本文以将Graylog从1.3.x升级到2.0.x。
意见建议
为下面概述的安装点使用单独的逻辑卷。
请注意,卷大小在很大程度上取决于要发送的日志量。
- '/var/lib/mongo'-30GB
- '/var/lib/elasticsearch'-100GB
- '/var/lib/graylog-server'-20GB
我们已将SELinux设置为强制模式。
EPEL储存库和工具
CentOS Extras储存库包括一个安装EPEL的软件包:
# yum install epel-release
工具
我们将需要以下内容:
# yum install wget vim pwgen
安装Java
从CentOS更新存储库安装Java:
# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
安装Elasticsearch
下载并安装公共签名密钥:
# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
创建“ /etc/yum.repos.d/elasticsearch.repo”存储库文件:
# cat << EOL > /etc/yum.repos.d/elasticsearch.repo [elasticsearch-1.7] name=Elasticsearch repository for 1.7.x packages baseurl=http://packages.elastic.co/elasticsearch/1.7/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enabled=1 EOL
通过yum安装elasticsearch:
# yum install -y elasticsearch
配置Elasticsearch
对于Elasticsearch而言,唯一重要的事情是我们设置了与Elasticsearch配置中Graylog2将使用的集群名称完全相同的集群名称(“ cluster.name:graylog”)。
打开'/etc/elasticsearch/elasticsearch.yml'。
设置集群名称:
cluster.name: graylog2
禁用动态搜索:
script.disable_dynamic: true
锁定内存:
bootstrap.mlockall: true
禁用多播:
discovery.zen.ping.multicast.enabled: false discovery.zen.ping.unicast.hosts: ["localhost:9300"]
Elasticsearch堆大小默认最小为256M,最大为1G。
建议将ES_HEAP_SIZE设置为可用内存的50%,但不要超过31GB。
打开“/etc/sysconfig/elasticsearch”并添加以下行:
ES_HEAP_SIZE=4G MAX_OPEN_FILES=64000
Elasticsearch必须同时打开许多文件,并且需要更高的打开文件限制,这是常规操作系统默认设置所允许的。
我们将配置安全限制文件“ /etc/security/limits.conf”,以允许最多64000个打开文件描述符。
# echo "elasticsearch soft nofile 64000" >> /etc/security/limits.conf ;\ echo "elasticsearch hard nofile 64000" >> /etc/security/limits.conf
启用并启动Elasticsearch服务:
# chkconfig --add elasticsearch # service elasticsearch start
测试服务:
# curl -X GET 'http://127.0.0.1:9200/_cluster/health?pretty=true' { "cluster_name" : "graylog2", "status" : "green", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 0, "active_shards" : 0, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0 }
如果我们需要删除所有索引,请执行以下操作:
# curl -XDELETE 'http://localhost:9200/_all'
当需要重置数据库时,我们发现它对开发非常有用。
安装MongoDB
在撰写本文时,当前稳定的MongoDB是v3.0。
为稳定的mongodb版本创建存储库文件:
# cat << EOL > /etc/yum.repos.d/mongodb.repo [mongodb-stable] name=MongoDB Repository #baseurl=https://repo.mongodb.org/yum/redhat/6/mongodb-org/stable/x86_64/ baseurl=https://repo.mongodb.org/yum/redhat/6/mongodb-org/3.0/x86_64/ gpgcheck=0 enabled=1 EOL
安装MondoDB:
# yum install -y mongo-10gen-server mongo-10gen
配置MongoDB
我们将MongoDB身份验证设置为false:
# egrep '^bind|^auth' /etc/mongod.conf bind_ip=127.0.0.1 auth=false
配置SELinux以允许MongoDB侦听端口27017.
# yum -y install policycoreutils-python
# semanage port -a -t mongod_port_t -p tcp 27017
CentOS 6设置的最大进程限制为1024,它将覆盖ulimit设置。
添加名为'/etc/security/limits.d/90-nproc.conf'的文件,并添加新的软和硬nproc值,以增加mongod用户的进程限制:
# echo "mongod soft nproc 32000" >>/etc/security/limits.d/90-nproc.conf ;\ echo "mongod hard nproc 32000" >>/etc/security/limits.d/90-nproc.conf
为mongod用户设置软和硬nofile值:
# echo "mongod soft nofile 64000" >> /etc/security/limits.conf ;\ echo "mongo hard nofile 64000" >> /etc/security/limits.conf
编辑'/boot/grub/grub.conf',然后将transparent_hugepage = never添加到内核行:
kernel /vmlinuz-2.6.32-504.30.3.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=uk LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root rd_NO_DM rhgb quiet transparent_hugepage=never
编辑“ /etc/rc.local”并在“ exit 0”之前添加以下内容:
if test -f /sys/kernel/mm/transparent_hugepage/khugepaged/defrag; then echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag fi if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag fi if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled fi
这些应该修复以下警告:
WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always' WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
启用并启动服务:
# chkconfig --add mongod # service mongod start
查看:
# mongo MongoDB shell version: 3.0.5 connecting to: test > exit bye
安装和配置Graylog2服务器
添加Graylog v1.3的存储库:
# rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-1.3-repository-el7_latest.rpm
安装Graylog服务器:
# yum install -y graylog-server pwgen
生成一个password_secret:
# sed -ie "s/^password_secret =.*/password_secret = $(pwgen -N 1 -s 96)/g" /etc/graylog/server/server.conf
设置管理员帐户密码:
# PASSWD=$(echo -n changeme|sha256sum|awk '{print }') # sed -ie "s/^root_password_sha2 =.*/root_password_sha2 = $PASSWD/g" /etc/graylog/server/server.conf
禁用统计信息:
# echo "usage_statistics_enabled" = false >>/etc/graylog/server/server.conf
默认发现模式是多播。
Graylog将尝试自动查找其他Elasticsearch节点。
当所有内容都在同一系统上运行时,这通常可以正常工作,但是在较大的网络拓扑中运行时,很快会出现问题。
文档建议将单播用于生产设置。
在Graylog中配置Zen单播发现,打开'/etc/graylog/server/server.conf'并添加以下几行:
elasticsearch_discovery_zen_ping_multicast_enabled = false elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300
还添加根电子邮件地址并设置时区:
root_email = "Hyman@theitroad" root_timezone = GMT
将MongoDB身份验证设置为false:
mongodb_useauth = false
确保is_master设置为true:
is_master = true
我们希望在当前活动索引达到10GB(大约)时旋转它,并且我们希望总共保留9个索引。
当达到最大索引数时,我们要删除最旧的索引。
打开“ /etc/graylog/server/server.conf”并设置以下参数以实现上述目的:
rotation_strategy = size elasticsearch_max_size_per_index = 10737418240 elasticsearch_max_number_of_indices = 9 retention_strategy = delete elasticsearch_index_prefix = graylog2
打开“/etc/sysconfig/graylog-server”,然后从8.0中删除了支持,从GREYLOG_SERVER_JAVA_OPTS中删除以下参数:
PermSize=128m MaxPermSize=256m
另外,将Xms和Xmx设置为如下所示:
-Xms2G -Xmx4G
这将允许使用4GB的内存。
启动服务:
# /etc/init.d/graylog-server start
检查是否有明显的错误:
# tail -f /var/log/graylog-server/server.log
安装和配置Graylog2 Web界面
安装Graylog Web前端:
# yum install graylog-web
将URI设置为localhost:
# sed -ie "s/^graylog2-server\.uris=.*/graylog2-server\.uris=\"http:\/\/127.0.0.1:12900\/\"/g" /etc/graylog/web/web.conf
设置应用程序密码:
# sed -ie "s/^application\.secret=.*/application\.secret=\"$(pwgen -N 1 -s 96)\"/g" /etc/graylog/web/web.conf
另外,在“ /etc/graylog/web/web.conf”文件中设置时区:
timezone="Europe/London"
打开'/etc/sysconfig/graylog-web'并调整Java堆大小:
GRAYLOG_WEB_JAVA_OPTS="-Xms512M -Xmx1G"
启动服务:
# /etc/init.d/graylog-web start
Web界面将在端口9000上侦听。
将浏览器指向该端口。
使用用户名admin和我们在server.conf中的root_password_sha2上配置的密码登录。
检查是否有明显的错误:
# tail -f /var/log/graylog-web/server.log
调优Java内存
对于具有8GB 内存的VM。
弹性搜索
# grep ^ES_HEAP /etc/sysconfig/elasticsearch ES_HEAP_SIZE=4G
Graylog服务器
# grep Xms /etc/sysconfig/graylog-server GRAYLOG_SERVER_JAVA_OPTS="-Xms2G -Xmx4G -XX:NewRatio=1 -server -XX:+ResizeTLAB -XX:+UseConcMarkSweepGC -XX:+CMSConcurrentMTEnabled -XX:+CMSClassUnloadingEnabled -XX:+UseParNewGC -XX:-OmitStackTraceInFastThrow"
Graylog
# grep Xms /etc/sysconfig/graylog-web GRAYLOG_WEB_JAVA_OPTS="-Xms512M -Xmx1G"
使用HTTPS为Graylog配置Apache
安装httpd和mod_ssl软件包,并生成一个自签名SSL证书:
# yum install -y httpd mod_ssl # cd /etc/ssl/certs # openssl req -x509 -newkey rsa:2048 -keyout graylog.key \ -out graylog.crt -days 1368 -nodes # chmod 0640 graylog.key
打开“ /etc/httpd/conf.d/graylog2.conf”并添加以下内容:
NameVirtualHost *:443 ServerName localhost <VirtualHost *:443> ServerName graylog.example.com ServerAlias graylog.example.com SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLCertificateFile /etc/ssl/certs/graylog.crt SSLCertificateKeyFile /etc/ssl/certs/graylog.key ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass/http://localhost:9000/ ProxyPassReverse/http://localhost:9000/ <Location Order allow,deny Allow from all </Location> </VirtualHost> <VirtualHost *:80> ServerName graylog.example.com Redirect/https://graylog.example.com/ </VirtualHost>
重新启动Web服务器。
配置Graylog2以接收消息
Syslog UDP输入
要添加输入以接收系统日志消息,请单击右侧“系统”菜单中的“输入”。
从下拉菜单中,选择“ Syslog UDP”,然后单击“启动新输入”。
将弹出“启动新的输入系统日志UDP”窗口,输入以下信息:
Title: syslog Port: 514 Bind address: 0.0.0.0
然后单击启动。
要从Linux主机发送系统日志(rsyslog),请使用:
$template GRAYLOGRFC5424,"< %PRI%>%PROTOCOL-VERSION% %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n" *.* @graylog.example.org:514;GRAYLOGRFC5424
GELF输入
以下“ nxlog.conf”配置读取Windows EventLog并将其以GELF格式发送到Graylog2服务器。
define ROOT C:\Program Files (x86)\nxlog Moduledir %ROOT%\modules CacheDir %ROOT%\data Pidfile %ROOT%\data\nxlog.pid SpoolDir %ROOT%\data LogFile %ROOT%\data\nxlog.log SuppressRepeatingLogs TRUE <Extension gelf> Module xm_gelf </Extension> <Input eventlog> # For Windows XP, 2000 and 2003 use the following: # Module im_mseventlog Module im_msvistalog ReadFromLast FALSE SavePos TRUE PollInterval 5 # Uncomment the following to collect specific event logs only Query <QueryList>\ <Query Id="0">\ <Select Path="Application">*</Select>\ <Select Path="System">*</Select>\ <Select Path="Security">*</Select>\ <Select Path="Microsoft-Windows-TerminalServices-Gateway/Operational">*</Select>\ </Query>\ </QueryList> </Input> <Output graylog> Module om_udp Host graylog.example.com Port 12201 OutputType GELF </Output> <Route 1> Path eventlog => graylog </Route>