syslog-ng收集日志+ELK平台搭建教程
syslog-ng部署:
用于接收交换机输出的日志。
syslog-ng安装很简单,可以顺便搜一下,文章有很多。我是yum直接安装的。
syslog-ng配置:
vi /etc/syslog-ng/syslog-ng.conf
配置文件需要添加source 和destination
#设置接收日志的协议和端口,localhost填写本机ip地址 source s_remote { tcp(ip(localhost) port(514)); udp(ip(localhost) port(514)); }; #收到的日志存放本地一份(elk搭建存不存本地都无所谓) destination d_file { file("/netlog/logs_${year}-${month}-${day}"); }; #收到的日志交给logstash处理,定义传输协议udp,端口5144(这里对应logstash的input) destination d_logstash { udp ("10.120.248.132" port(5144)); }; #多个目的,需要填写进来,分号隔开 log { source(s_remote); destination(d_file); destination(d_logstash); };
交换机上配置好log服务器地址(部署syslog-ng、elk的服务器ip地址)即可。
elk搭建(非集群):
elk分别是elasticsearch、logstash、kibana三个开源框架缩写。
elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。
logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。
kibana 提供日志分析的 web 界面,帮助汇总、分析和搜索重要数据日志。
1. 下载elk(版本保持一致!):
这里选择下载了6.3.0版本。
elasticsearch下载: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.tar.gz
kibana下载: https://artifacts.elastic.co/downloads/kibana/kibana-6.3.0-linux-x86_64.tar.gz
logstash下载: https://artifacts.elastic.co/downloads/logstash/logstash-6.3.0.tar.gz
下载完成,使用rz命令上传至centos7虚机,放在/home/目录下。
2. 解压
cd /home tar -zxvf elasticsearch-6.3.0.tar.gz tar -zxvf kibana-6.3.0-linux-x86_64.tar.gz tar -zxvf logstash-6.3.0.tar.gz
3. java环境搭建
推荐使用jdk1.8,为了方便安装了java-1.8.0-openjdk,安装方法见链接。
https://www.cnblogs.com/sitongyan/p/11262375.html
4. 部署elasticsearch,elk的包解压修改配置文件启动即可使用,不需要安装。
修改配置文件
vi /home/elasticsearch-6.3.0/config/elasticsearch.yml
# set the bind address to a specific ip (ipv4 or ipv6): # network.host: 0.0.0.0 ##服务器ip 本机 # # set a custom port for http: # http.port: 9200 ##服务端口 #
启动elasticsearch:
/home/elasticsearch-6.3.0/bin/elasticsearch #命令窗运行 /home/elasticsearch-6.3.0/bin/elasticsearch -d #后台线程运行
关闭elasticsearch:
ps -ef | grep elastic #后台线程关闭 kill -9 4442 ##pid 4442为查处线程的pid
验证elasticsearch启动:
5. 安装kibana
修改配置文件:
vi /home/kibana-6.3.0-linux-x86_64/config/kibana.yml
server.port: 5601 ##服务端口 server.host: "0.0.0.0" ##服务器ip 本机 elasticsearch.url: "http://localhost:9200" ##elasticsearch服务地址 与elasticsearch对应
启动kibana:
/home/kibana-6.3.0-linux-x86_64/bin/kibana #命令窗启动 nohup ./kibana-6.3.0-linux-x86_64/bin/kibana & #后台线程启动
关闭kibana:
ps -ef | grep kibana #后台线程关闭 kill -9 4525 ##pid 4525 为查处线程的pid
备注:常见问题多为 端口占用,以及目录未授权,需要同elasticsearch 使用目录运行执行的用户去执行 未配置则为root用户
验证kibana启动:
6. 安装logstash
新建配置文件:
vi /home/logstash-6.3.0/config/logback-es.conf
0.0.0.0填写本地ip地址,input标签表示监听udp协议的5144端口(此端口为syslog-ng设置的吐出日志的目标端口),input日志来源有很多种,udp是其中一种。
其他常见input标签使用。
input { udp { host => "0.0.0.0" port => 5144 } } output { elasticsearch { hosts => ["localhost:9200"] index => "switch-log-%{+yyyy.mm.dd}" } stdout { codec => rubydebug } }
备注:上述文件复制时必须去除多余空格,保持yml文件规范。
启动logstash:
/home/logstash-6.3.0/bin/logstash -f /home/logstash-6.3.0/config/logback-es.conf ##命令窗形式 nohup /home/logstash-6.3.0/bin/logstash -f /home/logstash-6.3.0/config/logback-es.conf & ##后台线程形式
关闭logstash:
ps -ef | grep logstash #后台线程关闭 kill -9 4617 ##pid 4617 为查处线程的pid
7. 验证elk
查看elasticsearch索引,logstash收集到日志后,会按照配置文件自动创建索引,并且根据时间yyyy.mm.dd切割数据建立一个一个的索引。
curl http://10.120.248.132:9200/_cat/indices?v ##查看自动创建的索引,能查看到说明elasticsearch存储了从logstash output来的数据。 curl -xdelete http://10.120.248.132:9200/索引名 ##清空无用索引
验证kibana日志展示是否正常:新建立的索引,kibana需要新建一下关联。
create index pattern创建索引
选择时间戳,创建完成。
然后在discover中查看日志。如果看不见日志,注意右上角的时间段选择,选择查看的时间长一些即可看见日志。
注意:右上角的选择查看日志的时间段(例如today)是参照按照当前浏览器时间。例如,需要查看的日志索引为7月1日,然而今天实际是7月2日,选择区间为today就没有日志,因为today代表当前时间7月2日,7月1日的日志中是不包含7月2日的。
8. kibana添加登录认证
elk验证完成之后,会发现kibana不需要用户登录直接即可访问,这样很不安全,需要添加登录认证。
可以采用nginx代理完成认证操作。
1.安装nginx完成之后,安装apache密码生成工具:
yum install httpd-tools
2.生成密码文件:
mkdir -p /etc/nginx/passwd htpasswd -c -b /etc/nginx/passwd/kibana.passwd user ****** ##-c表示创建一个加密文件,-b表示在htpassswd命令行中一并输入用户名和密码而不是根据提示输入密码。
3.配置nginx:
vi /usr/local/webserver/nginx/conf/nginx.conf
server { listen 5601; ##监听用户访问的5601端口 server_name localhost:5601; ##本机ip:port #charset koi8-r; #access_log logs/host.access.log main; location / { auth_basic "kibana login auth"; auth_basic_user_file /usr/local/test/passwd/kibana.passwd; ##存储用户密码文件 proxy_pass http://localhost:5602; #因为nginx代理了kibana的5601端口,所以kibana需要换一个端口,我换成了5602,注意kibana的配置文件也需要改成5602端口 proxy_redirect off; } #error_page 404 /404.html;
4.修改kibana配置文件:
vi /home/kibana-6.3.0-linux-x86_64/config/kibana.yml
# kibana is served by a back end server. this setting specifies the port to use. server.port: 5602
5.重启kibana服务,配置文件生效:
ps -ef | grep kibana kii -9 进程号
cd /home/
nohup ./kibana-6.3.0-linux-x86_64/bin/kibana & ##后台启动
6.访问kibana
后续会补充logstash时间戳问题的处理办法。