ELK的安装以及Logstash收集日志的配置
Centos7+ELK V5.5.0
作者:编程界的小学生
时间:2018-3-18
零、注意事项
1、必须安装JDK,并且配置好环境变量(参考:【运维之路-CentOS7+常用软件的安装(JDK+Tomcat+Nginx+Redis+MySQL)】)
2、必须非root用户启动
一、ELK版本
V5.5.0
二、Elasticsearch的安装
1、安装
解压缩
tar -zxvf elasticsearch-5.5.0.tar
进入目录
cd elasticsearch-5.5.0/
2、配置
vim config/elasticsearch.yml
修改如下key:
cluster.name: es_cluster #这里是你的el集群的名称
node.name: node0 # elseach集群中的节点
path.data: /tmp/elasticseach/data #设置 data 目录
path.logs: /tmp/elasticseach/logs #设置 logs 目录
network.host:192.168.10.101 #这里配置本机的 ip 地址
http.port: 9200 #默认的端口
修改服务器内存、最大链接数等参数,不然就会报各种ERROR:
(1)修改config下的jvm.option文件
shell > vim/opt/elasticsearch-5.5.0/config/jvm.opstions
-Xms2g改为1g或者512M
-Xmx2g改为1g或者512M
(2)修改limits.conf文件添加如下内容
shell > vim/etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
(3)编辑sysctl.conf文件添加如下内容
shell > vim/etc/sysctl.conf
vm.max_map_count=655360
shell > sysctl -p
3、启动
注意:非root用户!!
./bin/elasticsearch
4、测试
输入http://localhost:9200
三、Head插件的安装
1、先在本地解压缩elasticsearch-head-master.zip
2、安装node和grunt
3、修改上一节安装的Elasticsearch的elasticsearch.yml文件添加以下内容
4、修改head插件的Gruntfile.js
connect: {
server: {
options: {
hostname:‘0.0.0.0‘,
port: 9100,
base:‘.‘,
keepalive: true
}
}
}
#增加hostname属性,设置为0.0.0.0
5、修改app.js
elasticsearch-head/_site/app.js
this.base_uri =this.config.base_uri || this.prefs.get("app-base_uri") ||"http://192.168.73.22:9200";
#把localhost修改成ES的服务器地址,如上面192.168.73.22
6、运行head
npm install
#如果安装时报错则尝试下面命令
shell > npm install phantomjs-prebuilt@2.1.14--ignore-script
#启动
shell > grunt server
#后台启动
shell > cd /opt/elasticsearch-head/ && gruntserver &
7、测试
输入http://localhost:9100
四、Logstash的安装
1、安装
tar -zxvf logstash-5.5.0.tar.gz
2、运行以及测试
cd /opt/logstash-5.5.0/
shell > bin/logstash -e'input}output}'
Hello World #在此输入Hello World,看到有返回说明安装成功
{
"@timestamp"=> 2017-10-31T07:47:48.466Z,
"@version"=> "1",
"host" =>"localhost",
"message"=> "Hello World"
}
五、Kibana的安装
1、安装
tar-zxvf kibana-5.5.0-linux-x86_64.tar.gz
2、配置
cd kibana-5.5.0-linux-x86_64/
vim config/kibana.yml
server.port: 5601 # kibaba服务 port
server.host: "192.168.73.22" #你的kibaba 的服务host
elasticsearch.url: "http://192.168.73.22:9200"# elastaticseach的host
kibana.index: ".kibana" # kibana
3、启动
./bin/kibana
4、测试
输入:http://localhost:5601
六、Logstash的配置
logstash.conf
七、ELK+Redis
1、为什么要用Redis
假如我们项目是多服务器部署(或者带有演示环境和生产环境等),这样我们要部署ELK的话需要部署两套来各自收集各自服务器上的日志到logstash。我们可以架一台Redis服务,然后让项目代码中打印的log直接到redis中(比如logback等),这时候配置logstash的input为redis即可。这样我们项目日志都打输出到redis,然后logstash去同步redis的日志数据到Elasticsearch。
2、logback的配置文件
logback-spring.xml
3、logstash的配置文件
logstash-redis.conf
4、同步到Elasticsearch里的数据长什么样?
5、注意几点
5.1、无需担心redis会爆掉,因为只要logstash同步完数据,就会立刻删除掉redis中的log数据。5.2、建议log打印到redis的其他库,不建议和业务库放到一起,我这里是业务在0库,Log在5库。
6、存在的问题
“七”的一开头就说了用redis的好处是为了解决多台机器部署的日志问题,但是只解决了项目日志的问题,nginx或者tomcat的日志并没解决,因为nginx和tomcat是单独部署到服务器上的,日志文件也在各自的服务器上。所以可以用如下思路解决:
每台服务器各部署一台logstash负责收集各服务器上的日志文件,并同步到redis中,然后单独部署一台logstash负责从redis中读取日志同步到Elasticsearch。
也就是说假设有A,B两台服务器,那么我们需要部署三台Logstash,具体如下:
项目日志-》直接通过日志插件扔到redis中
A-》logstash-》负责收集A服务器上的nginx+tomcat等日志文件到redis
B-》logstash-》负责收集B服务器上的nginx+tomcat等日志文件到redis
然后在单独部署一台logstash(可以在A,B或者其他单独能访问Redis的服务器),这台logstash将redis的数据同步到Elasticsearch中。
八、如何给kibana加上密码访问
直接通过nginx即可。步骤如下
1、安装httpd-tools
yuminstall-y httpd-tools
2、配置用户名密码
他会为我们自动在/etc/nginx/conf.d/下创建一个httpasswd
htpasswd -bc /etc/nginx/conf.d/httpasswdadminadmin
3、配置nginx
### 查看日志
location /kibana {
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/conf.d/httpasswd;
rewrite /kibana/(.*) /$1 break;
proxy_pass http://192.168.73.22:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
4、配置kibana
修改kibana.yml的server.basePath属性
server.basePath: "/kibana"
5、注意
5.1、server.basePath默认是根目录,我们这里改成/kibana,要和nginx里面的映射路径/ kibana和rewrite一致。5.2、若上一步没问题,访问还是404,则检查proxy_pass是ip还是localhost,两个来回试试。
6、效果
访问路径:一定要带上最后那个/
完整的文档教程以及配置文件都放到了码云上
https://gitee.com/geekerdream/advanced-notes/tree/master
如果对你有帮助请给个star,谢谢。
领取专属 10元无门槛券
私享最新 技术干货