日志收集,是运维工作中很重要的一环。不管是针对线上的系统服务,还是基础架构上的网络设备,有一套完整合适的日志收集系统,是必不可少的,这将成为之后遇到故障问题,提供一个有效的依据和排查手段。
目前已接触的日志收集系统:
Windows下的Kiwi syslog sever
Linux下的rsyslog,Graylog,ELK,前者是老牌日志收集工具,后两者简单看了一下介绍,日志收集只是其中一个功能,其功能优势更体现在分析和搜索。
ELK官网上提供了多种安装方式,软件包,源码,docker,之前一直使用的是Ubuntu的apt安装方式,后来在新版本发布后,就用了源码学习搭建了一次,据说这个版本针对Index索引的删除操作,有了更好的支持,正好可以来验证一下。
在安装ELK之前,如必需的java环境已具备,在此忽略。
部署的环境采用Ubuntu16.04,个人比较喜欢Ubuntu,基本大多数应用部署在此。
1.下载安装
#下载链接直接在官网获取,此次忽略
#解压
tar -zxvf elasticsearch-6.6.1.tar.gz
tar -zxvf kibana-6.6.1-linux-x86_64.tar.gz
tar -zxvf logstash-6.6.1.tar.gz
2.软件包目录
#命名
mv elasticsearch-6.6.1 elasticsearch
mv kibana-6.6.1-linux-x86_64 kibana
mv logstash-6.6.1 logstash
#将目录移动到/usr/local下
cp -r elasticsearch /usr/local/
cp -r kibana /usr/local/
cp -r logstash /usr/local/
3.配置
配置elasticsearch
#编辑配置文件
/usr/local/elasticsearch/config/elasticsearch.yml
#修改如下内容
cluster.name: es-cluster
node.name: node-1
network.host: 10.x.x.11
http.port: 9200
#增加
http.cors.allow-origin: "/.*/"
http.cors.enabled: true
#elasticsearch不能使用root执行,需要给执行账户分配权限
chown padmin:padmin -R /usr/local/elasticsearch/
运行
#此处要加“-d”后台运行
/usr/local/elasticsearch/bin/elasticsearch -d
#不加实际测试也可以正常运行,可以看到运行log。但遇到了一个奇怪的问题,当未后台运行时,如果将远程登录断开后,运行elasticsearch的进程就会自动停止,导致9200端口关闭。
Kibana
#编辑配置文件
/usr/local/kibana/config/kibana.yml
#修改如下内容,此处url的ip需与elasticsearch文件中保持一致
server.port: 5601
elasticsearch.hosts: ["http://10.x.x.11:9200"]
运行
#此处加“&”,使其可以后台运行
#遇到类似问题,不后台运行,同样会出现关闭远程管理后,进程自动停止
/usr/local/kibana/bin/kibana &
Logstash
cd /usr/local/logstash/config/
#复制模板文件生成配置文件
cp logstash-sample.conf logstash.conf
#编辑配置文件,此处hosts的url对应的是elasticsearch配置中的ip
input {
syslog {
port => 514
}
}
output {
elasticsearch {
hosts => ["http://10.x.x.11:9200"]
index => "office.network-syslog-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
#编辑配置文件
usr/local/logstash/bin/logstash.yml
#修改如下内容,ip与elasticsearch配置中的ip的一致
http.host: "10.x.x.11"
http.port: 9600-9700
运行
/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf
至此ELK的三大组件已完成部署并正常运行了
但存在一个安全问题,就是Kibana现在是无认证登录,直接访问url就可以跳转到日志浏览的页面。而官方提供的x-pack插件虽然可以提供验证登录的安全功能,但由于其license收费,从预算投入及需求来看,显然也有并不适合多数场景。
因此这里采用了一种折中的方式,通过Nginx转发代理&apache功能间接完成认证的目的,此方案也是网上多数大神提供的参考,这里借用一下。
Nginx代理
#需要先下载安装所需软件包
apt-get install nginx
apt-get install apache2-utils
认证配置
#创建目录及认证文件
mkdir -p /data/nginx/db/
cd /data/nginx/db/
touch passwd.db
配置Nginx
#编辑如下文件
/etc/nginx/nginx.conf
#在"http{"下添加如下内容,此处目的是让外部访问kibana的80端口,然后系统根据这个访问请求,将80重定向本身的5601端口上,进而访问kibana的web页面
#proxy_pass 重定向到127.0.0.1上,目的也是为了让外部无法直接访问5601端口
server {
listen 80;
server_name 10.x.x.11;
location / {
auth_basic "secret";
auth_basic_user_file /data/nginx/db/passwd.db;
proxy_pass http://127.0.0.1:5601;
proxy_set_header Host $host:5601;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Via "nginx";
}
access_log off;
}
添加认证账号
#执行以下命令,使用的是前边已经创建的认证文件,建立账号admin
htpasswd -c /data/nginx/db/passwd.db admin
#命令执行后,会提示输入新密码
#查看认证文件,会发现admin账号已经生成了密码,且是密文的
cat /data/nginx/db/passwd.db
admin:$apr1$.D5RMgHD$DMr/J1q.iuM/OaAnkiKKU1
4.访问
通过访问http://10.x.x.11/app/kibana#/home?_g=() ,会有认证框弹出,输入密码后登录
登录Kibana后,还需要在logstash上添加索引,通过office.network-syslog* 匹配
5.索引周期策略
值得一提的是,针对Index索引的保存时间及删除,增加了一个索引周期策略Index Lifecycle Policies