elk搭建线上实战
整体部署架构
一、基础环境介绍
系统:CentOS Linux release 7.6.1810 (Core)
机器环境
代理机:111.60.23.165(安全考虑所以通过代理机进行端口转发)
elk-node-01: 10.200.58.100 master机器
elk-node-02: 10.200.58.101 slave机器
redis: 10.200.58.100
logstash: 10.200.58.100
二、代理机安装haproxy
[root@yh-elk ~] # wget http://download.openpkg.org/components/cache/haproxy/haproxy-1.8.10.tar.gz
[root@yh-elk ~] # tar -xvf haproxy-1.8.10.tar.gz
[root@yh-elk ~] # make TARGET=linux2628 ARCH=x86_64 PREFIX=/usr/local/haproxy
[root@yh-elk ~] # make install PREFIX=/usr/local/haproxy
[root@yh-elk ~] # mkdir /usr/local/haproxy/conf
[root@yh-elk ~] # cp examples/option-http_proxy.cfg /usr/local/haproxy/conf/haproxy.cfg
配置文件添加
完成配置后启动haproxy
[root@yh-elk ~] # /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
iptables开放配置的端口
[root@yh-elk ~] # iptables -I INPUT -p tcp --dport 19200 -j ACCEPT
[root@yh-elk ~] # iptables -I INPUT -p tcp --dport 19201 -j ACCEPT
[root@yh-elk ~] # iptables -I INPUT -p tcp --dport 15601 -j ACCEPT
通过访问宿主机的19200,19201端口分别转发到elk-node1,elk-node2的9200端口
通过访问宿主机的15601端口转发到elk-node1的5601端口
三、配置主备的elk(可同步开始)
1.下载并安装GPG Key添加yum仓库
[root@elk-node1 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
[root@elk-node1 ~]# vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
2.安装java环境elasticsearch和redis
[root@elk-node01 ~]# yum install -y elasticsearch
[root@elk-node01 ~]# yum install -y redis
[root@elk-node01 ~]# yum install -y java
3.创建数据目录,修改elasticsearch配置
[root@elk-node01 ~]# mkdir -p /data/es-data
[root@elk-node01 ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: huanqiu # 组名(同一个组,组名必须一致)
node.name: elk-node1 # 节点名称,建议和主机名一致
path.data: /data/es-data # 数据存放的路径
path.logs: /var/log/elasticsearch/ # 日志存放的路径
bootstrap.mlockall: true # 锁住内存,不被使用到交换分区去
network.host: 0.0.0.0 # 网络设置
http.port: 9200 # 端口
启动elasticsearch
[root@elk-node01 ~]# chown -R elasticsearch.elasticsearch /data/
[root@elk-node01 ~]# systemctl start elasticsearch
[root@elk-node01 ~]# systemctl status elasticsearch
通过代理机访问
http://111.60.23.165:19200/
返回如下则没问题
下载插件head
[root@elk-node1 src]# /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
[root@elk-node1 src]# systemctl restart elasticsearch
安装完成可测试数据读写
http://111.60.23.165:19200/_plugin/head/
"复合查询"下,选择GET选项,在/index-demo/test/后面输入上面POST结果中的id号,不输入内容,即{}括号里为空!
然后点击”验证JSON“->“提交请求”,观察右栏内就有了上面插入的数据了
安装kopf监控插件
[root@elk-node1 src]# /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf
[root@elk-node1 src]# systemctl restart elasticsearch
访问插件
http://111.60.23.165:19200/_plugin/kopf/#!/cluster
可在页面看到节点状态
elk-node-02配置
前面配置和node-01相同在elasticsearch配置文件加上集群配置
[root@elk-node2 src]# vim /etc/elasticsearch/elasticsearch.yml
discovery.zen.ping.unicast.hosts: ["10.200.58.100", "10.200.58.101"]
配置完成可登录
http://111.60.23.165:19201/_plugin/kopf/#!/cluster 查看是否两个节点是集群状态
基本的输入输出测试
[root@elk-node2 ~]# /opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{} }'
可在终端写上一些数据
返回页面查看数据是否可以读取
master收集到日志后,会把一部分数据碎片到salve上(随机的一部分数据),master和slave又都会各自做副本,并把副本放到对方机器上,这样就保证了数据不会丢失。
抓取日志filebeat安装配置
yum -y install filebeat
vim /etc/filebeat/filebeat.yml
filebeat.prospectors:
- input_type: log
paths:
- /data/tuya-live.broadcast/logs/admin* #读取日志路径
tags: ["livebroadcast-admin-service"] #标记
index.number_of_shards: 3s
output.logstash:
hosts: ["10.200.58.100:5044"]
配置完成重启 systemctl filebeat restart
查看状态 systemctl filebeat restart
filebeat有三种输出方式
将读取的日志输出到redis,输出到elasticsearch或输出到logstash
这里采用的是输出到logstash
logstash安装配置
yum -y install logstash
vim /etc/logstash/conf.d/shipperlog.conf
input{
beats {
port => "5044"
}
}
output{
if "livebroadcast-admin-service" in [tags]{
redis {
host => "10.200.58.100"
port => "6379"
db => "1"
data_type => "list"
key => "livebroadcast-admin-service"
}
}
获取filebeat传输的数据写进redis
通过后台启动
启动前可检查配置
/opt/logstash/bin/logstash -f /etc/logstash/conf.d/shipperlog.conf &
/opt/logstash/bin/logstash -f shipperlog.conf --configtest
vim /etc/logstash/conf.d/redis_in.conf
input {
redis {
host => "10.200.58.100"
port => "6379"
db => "1"
data_type => "list"
key => "livebroadcast-admin-service"
}
}
output {
elasticsearch {
hosts => ["10.200.58.100:9200"]
index => "livebroadcast-admin-service-%{+YYYY.MM.dd}"
}
}
从redis读取数据写入elasticsearch
通过后台启动
/opt/logstash/bin/logstash -f /etc/logstash/conf.d/redis_in.conf &
安装配置kibana
kibana的安装:
[root@elk-node1 ~]# cd /usr/local/src
[root@elk-node1 src]# wget https://download.elastic.co/kibana/kibana/kibana-4.3.1-linux-x64.tar.gz
[root@elk-node1 src]# tar zxf kibana-4.3.1-linux-x64.tar.gz
[root@elk-node1 src]# mv kibana-4.3.1-linux-x64 /usr/local/
[root@elk-node1 src]# ln -s /usr/local/kibana-4.3.1-linux-x64/ /usr/local/kibana
修改配置文件:
[root@elk-node1 config]# pwd
/usr/local/kibana/config
[root@elk-node1 config]# cp kibana.yml kibana.yml.bak
[root@elk-node1 config]# vim kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://10.200.58.100:9200"
kibana.index: ".kibana"
注意这个.Kibana索引用来存储数据,千万不要删除了它。它是将es数据通过kibana进行web展示的关键。
这个配置后,在es的web界面里就会看到这个.kibana索引。
配置完成启动kibana
systemctl kibana restart
通过页面查看
111.60.23.165:15601