版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
架构注意事项
Graylog节点应重点关注CPU功能。
Elasticsearch节点应具有尽可能多的RAM和磁盘空间,提供日志文件的持久化存储和检索。
MongoDB只是存储Graylog的元信息和配置数据,不需要很多资源。
本文采用单机最小化安装
一、基础配置
[root@graylog-server ~]# sed -i "SELINUX=enforcing?SELINUX=disabled?g" /etc/selinux/config
[root@graylog-server ~]# yum -y install java-1.8.0-openjdk-headless.x86_64
[root@graylog-server ~]# yum -y install epel-release
[root@graylog-server ~]# yum -y install pwgen
[root@graylog-server ~]# timedatectl set-timezone Asia/Shanghai
[root@graylog-server ~]# vim /etc/chrony.conf
server ntp.aliyun.com iburst
二、Install mongoDB
[root@graylog-server ~]# vim /etc/yum.repos.d/mongodb-org.repo
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
[root@graylog-server ~]#
[root@graylog-server ~]# yum -y install mongodb-org #安装最新版
[root@graylog-server ~]# mkdir -p /data/mongodb #创建mongoDB数据目录
[root@graylog-server ~]# vim /etc/yum.conf #防止yum update mongodb版本升级,固定版本
exclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools
修改mongoDB 数据存放路径
[root@graylog-server ~]# vim /etc/mongod.conf
storage:
dbPath: /data/mongodb
[root@graylog-server ~]# chown -R mongod: /data/mongodb/
[root@graylog-server ~]# systemctl start mongod # 会自动加入开机自启,无需enable
设置mongodb安全登录验证账号,安全考虑
[root@graylog-server ~]# mongo
> use admin #一定要进入admin
> db.createUser({user:'root',pwd:"123456",roles:["root"]}) #先创建超级管理员
Successfully added user: { "user" : "root", "roles" : [ "root" ] }
>
> show users
{
"_id" : "admin.root", #此为登录验证的库及用户
"userId" : UUID("0233926d-4c05-4ec0-b613-6ff86a0cc578"),
"user" : "root",
"db" : "admin",
"roles" : [
{
"role" : "root", # 权限
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
>
再创建graylog DB user,用于graylog连接使用
> use graylog # 创建库并进入库,一定要进入此库才创建
switched to db graylog
> db.createUser({user:"graylog",pwd:"123456",roles:["readWrite"]})
Successfully added user: { "user" : "graylog", "roles" : [ "readWrite" ] }
>
> show users
{
"_id" : "graylog.graylog", # 此为登录验证的库及用户
"userId" : UUID("01d98759-335c-4f01-838e-bf1d706c00aa"),
"user" : "graylog",
"db" : "graylog",
"roles" : [
{
"role" : "readWrite", # 权限
"db" : "graylog"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
>
开启mongodb安全认证
security:
authorization: enabled
[root@graylog-server ~]# systemctl restart mongod
测试登录
[root@graylog-server ~]# mongo -u root -p 123456 --authenticationDatabase admin
[root@graylog-server ~]# mongo -u graylog -p 123456 --authenticationDatabase graylog
三、Install Elasticsearch
[root@graylog-server ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
[root@graylog-server ~]# vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/oss-6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
[root@graylog-server ~]# yum -y install elasticsearch-oss # 安装最新版本
修改Elasticsearch配置
[root@graylog-server ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: graylog
path.data: /data/elasticsearch # 数据保存路径
action.auto_create_index: false # 最后一行添加
[root@graylog-server ~]# mkdir /data/elasticsearch
[root@graylog-server ~]# chown -R elasticsearch: /data/elasticsearch/
[root@graylog-server ~]# systemctl start elasticsearch
[root@graylog-server ~]# systemctl enable elasticsearch
四、Install graylog
[root@graylog-server ~]# rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-3.1-repository_latest.rpm
[root@graylog-server ~]# yum -y install graylog-server
PS: password_secret和root_password_sha2设置是强制性的,没有它们,Graylog将无法启动
生成password_secret密码
[root@graylog-server ~]# pwgen -N 1 -s 96
d0ns2jgaRAOYDMelv6YWgh5m7YopDS00e266jqDLfMPMGvjVb5VaEi6TPk6hUUmaJXtM6VlJ62DHt3utPZhlx715wBcGzKoG
生成root_password_sha2密码 (Web登录密码)
[root@graylog-server ~]# echo -n "123456" | sha256sum | cut -d" " -f1
9d36cb9d20d5262d868ce87baa69b048bfc65a6d02feaef35f46a7e467adace9
修改graylog配置
[root@graylog-server ~]# vim /etc/graylog/server/server.conf
root_timezone = Asia/Shanghai
mongodb_uri = mongodb://graylog:123456@localhost:27017/graylog
http_bind_address = 0.0.0.0:9999 #安全考虑,修改端口
elasticsearch_hosts = http://127.0.0.1:9200
elasticsearch_shards = 1
PS: 如果mongodb用户密码使用了特殊字符,则连接mongodb使用%+字符的十六进制数;如:@ = %40
[root@graylog-server ~]# systemctl start graylog-server
[root@graylog-server ~]# systemctl enable graylog-server
[root@graylog-server ~]# firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=9999
[root@graylog-server ~]# firewall-cmd --permanent --add-port=9999/tcp #添加端口才能转发,暂时不知道原因
[root@graylog-server ~]# firewall-cmd –reload
web login
http://IP:80 #做了端口转发
默认管理员用户名admin,密码为root_password_sha2配置设定的密码
五、Install Graylog Sidecar
以下操作在后端Server上执行(以收集graylog server为列)
Graylog Sidecar是一个轻量级配置管理系统,适用于不同的日志收集器,也称为后端。Graylog节点充当包含日志收集器配置的集中式集线器。在支持的消息生成设备/主机上,Sidecar可以作为服务(Windows主机)或守护程序(Linux主机)运行。运行在不同机器上进行日志的采集并发送到graylog server
1、安装Sidecar、filebeat
PS:我用的是filebeat进行日志采集,如果用nxlog进行采集,同样的需要安装nxlog程序
sidecar download url:https://github.com/Graylog2/collector-sidecar/releases
filebeat download url:https://www.elastic.co/cn/downloads/beats/filebeat
安装
[root@graylog-server ~]# rpm -ivh graylog-sidecar-1.0.2-1.x86_64.rpm
[root@graylog-server ~]# rpm -ivh filebeat-7.1.0-x86_64.rpm
手动创建server_api_token
[root@graylog-server ~]# vim /etc/graylog/sidecar/sidecar.yml
server_url: "http://xxx.xxx.xxx.xx:9999/api/" #graylog server ip:port/api/
server_api_token: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
node_name: "Server_name"
update_interval: 10
send_status: true
说明:
server_url: 这个填 Graylog-server 的地址
server_api_token: 当前这台 Sidecar 自己的秘钥
node_name: 用于辨识是从哪个 Sidecar node 发来的消息。这个很有必要设置一下,做图表统计会用到。
update_interval: 多久 Sidecar 向 Graylog 报告一次自己的运行状况,以及抓取最新下发的配置文件。没明说单位,推测是秒。
send_status: 是否向 Graylog 报告自己的状态信息。
root@graylog-server ~]# graylog-sidecar -service install
[root@graylog-server ~]# systemctl start graylog-sidecar
2、配置日志收集
2.1、配置input
PS:我用的是filebeat进行日志采集,所以选择的是Beats
说明:
Title: Input 的标题。这个可以随便写,稍后可以改
Bind Address: 是否固定监听 IP。比如写成本机内网 IP,或者一个域名,默认 0.0.0.0 代表不固定
Port: 监听哪个端口。也就是 Inputs 开放哪个端口用于接收 Sidecar 的日志推送,稍后可以改
Recive Buffer Size: 最大允许的接收器缓存大小。相当于一次超过这个数值的日志包推过来会失效,通常来说基本达不到这个极限,单位 Byte,默认1048576,也就是 1MB,稍后可以改
No. of worker threads: 这个用于指定有多少个线程在处理日志接收。超大并发量的可以酌情调整,稍后可以改
2.2、配置Filebeat
创建一个graylog server var,后续client可以直接调用
# Needed for Graylog
fields_under_root: true
fields.collector_node_id: ${sidecar.nodeName}
fields.source: ${sidecar.nodeName}
fields.gl2_source_collector: ${sidecar.nodeId}
filebeat.inputs:
- input_type: log
paths:
- /var/log/graylog-server/server.log
- /var/log/mongodb/mongod.log
type: log
output.logstash:
hosts: ["${user.Graylog_IP}"]
path:
data: /data/graylog-sidecar/collectors/filebeat/data
logs: /data/graylog-sidecar/collectors/filebeat/log
PS:fields.source: ${sidecar.nodeName} #一定要留意加入这行配置!否则日志展示界面 “Source” 会提示 “unknown”
点击右上角的 Administration ,进入管理界面,找到刚连接上来的后端Sidecar,点击那个 filebeat 勾选上,在右侧下拉菜单中点击 Configuration,点击我们刚写好的配置文件
这时候我们就能在 Search 页面看到日志进来的消息了
PS:自动在graylog server生成5044 port
firewall-cmd --permanent --add-port=5044/tcp,后续client与5044 connection
如果使用syslog收集日志请查看我的另外一篇文章syslog collect log
六、日志规整
1、添加Search数据到dashboard
2、新建 Pipeline
点击 System 选项卡,找到“Pipeline”。
点击“Add new pipeline”:
Title: Pipeline 的标题.稍后可以改。
Description: 描述。稍后可以改。
创建后,点击右上角的 “Manage rules” ,点击 “Create Rule”,创建一条新的 Pipeline 规则
// 这个 fields 的名称写法跟你在 search 页面上看到的名字一致
rule "funciton RemoveFields" // 规则名,起头句。
when // 一个判断条件,逻辑很简单。
has_field("message") //当存在 fields("message") 时,也可以设为其他的 fields。
then
// 以下为删除linux fields
remove_field("@metadata_beat");
remove_field("@metadata_type");
remove_field("@metadata_version");
remove_field("@timestamp");
remove_field("agent_ephemeral_id");
remove_field("agent_hostname");
remove_field("agent_id");
remove_field("agent_version");
remove_field("beats_type");
remove_field("collector_node_id");
remove_field("ecs_version");
remove_field("log_offset");
//以下为删除windows fields
remove_field("beat_hostname");
remove_field("beat_name");
remove_field("beat_version");
remove_field("computer_name");
remove_field("event_data_Binary");
remove_field("event_id");
remove_field("keywords");
remove_field("level");
remove_field("process_id");
remove_field("provider_guid");
remove_field("record_number");
remove_field("source_name");
remove_field("tags");
remove_field("thread_id");
end
这时候还没有分配让 Pipeline 处理哪个信息流。这里回到 Manage Pipeline 页面,点击右侧的 Edit
在新页面中,点击 Edit connections,点击你要处理的信息流,比如 All message
然后点击 Add new stage,指定 Pipeline 处理这个信息流时的执行步骤
说明:
Stage: 步骤顺序。输入 “1” ,表示第一步执行本操作
Stage rules: 执行哪一个 “Rule”。在下拉里选择刚才写的脚本,表示执行 function RemoveFields 这个 rule,稍后可以改。
Continued processing next stage when: 当满足什么条件时,流转到下一 Stage(不是当前 Stage)操作。因为 Stage 可以建立多个,单个 Stage 里的 Rule 也是可以多选的,所以这里有两个选框:
○ All rules on this stage match the message: “所有的rule都执行完毕后,进行下一个 Stage”
◎ At least one of the rules on this stage matches the message: “只要有一个rule执行完毕,就进入下一个 Stage”
因为我们只有一个 Rule 也只有一个 Stage,所以这里选什么都没差,有多 Stage 需求的可以注意一下这里的配法。
Stage 配好后,Pipeline 是直接生效的,不需要点什么操作了.
这时候回到 Search 界面,随便点击一条最新的消息展开看,可以看到消息短了很多,许多 Fields 都被删掉了。
graylog 要学习的内容还有很多,后续还会继续更新此博文