简介:
elasticsearch: 分布式搜索引擎
logstash: 日志收集与过滤,输出给elasticsearch
kibana: Kibana 是为 Elasticsearch设计的开源分析和可视化平台
filebeat: Filebeat是本地文件的日志数据采集器
环境:
1或多台elasticsearch,主机2g+,从机1g+
1台logstash,1g+
1台业务机,要安装filebeat
1台kibana可视化
0.通用的java安装法
官网指路:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
版本:
Linux x64 | 185.16 MB | jdk-8u231-linux-x64.tar.gz |
具体下载地址:https://download.oracle.com/otn/java/jdk/8u231-b11/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64.tar.gz?AuthParam=1573475025_69f85eeb325c1a8e2037d76d4964650c
注:这个下载地址不保证直接能用,常规节奏是进入Oracle官网进行点击下载(还要求注册Oracle会员),然后用ftp上传服务器。
如果好使,可以直接在shell里wget它。本文是进行了Oracle会员注册后,再shell中就可以下载了。不知道这个注册是不是影响了下载能力。
安装Java环境
以本文为例,我们按照管理将文件jdk-8u231-linux-x64.tar.gz下载到/software文件夹中。
# 本文以jdk-8u192版本为例
# cd /software
# tar xvf jdk-8u192-linux-x64.tar.gz
# mkdir /usr/local/java
# mv /software/jdk1.8.0_192 /usr/local/java/
# 建立一个/usr/local/的java专用文件夹,因为java环境版本繁杂,为以后可能进行的版本拓展,将所有java文件放在专用文件夹下,并以版本区分
# 将java加入环境变量。
# echo "export PATH=\$PATH:/usr/local/java/jdk名字不固定/bin" >> /etc/profile
# echo "export PATH=\$PATH:/usr/local/java/jdk1.8.0_192/bin" >> /etc/profile
# source /etc/profile
1.elasticsearch下载与安装
官网首页:https://www.elastic.co/cn/downloads/
下载elasticsearch https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.2-x86_64.rpm
下载logstash https://artifacts.elastic.co/downloads/logstash/logstash-7.4.2.rpm
# cd /software
# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.2-x86_64.rpm
上面java安装路径因人而异。此处需要软连接。根据各自区别填写
# ln -s /usr/local/java/jdk名字不固定/bin/java /usr/bin/java
# ln -s /usr/local/java/jdk1.8.0_192/bin/java /usr/bin/java
# yum install -y elasticsearch-7.4.2-x86_64.rpm
# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"
如下即可
cluster.name: 自定义集群名字
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
要做集群可以先往下看,配置集群时还要加
# systemctl start elasticsearch
# systemctl enable elasticsearch
稍等一分钟 9200 9300端口被占用,视为成功。
# ss -nltp
# curl http://10.1.1.14:9200/_cluster/health?pretty
{
"cluster_name" : "test_cluster",
"status" : "green", #绿为成功
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0 #NaN为失败
}
2.elasticsearch集群
可以把刚才那机器克隆一下。
分别配置:
# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
cluster.name: elk-cluster
node.name: 10.1.1.14 #本机IP或主机名
node.master: true #指定为master节点
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.1.1.14", "10.1.1.15"] #集群所有节点IP
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
cluster.name: elk-cluster
node.name: 10.1.1.15 #本机IP或主机名
node.master: false #指定为slave节点
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.1.1.14", "10.1.1.15"] #集群所有节点IP
注:复制上面的时候#后面的删掉,有可能有问题 @_@ 。
克隆机需要清空他俩。
# rm -rf /var/lib/elasticsearch/*
# rm -rf /var/log/elasticsearch/*
分别重启,稍等一两分钟 9200 9300端口被占用,视为成功。
# systemctl restart elasticsearch
# curl http://10.1.1.14:9200/_cluster/health?pretty
"status" : "green",
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
视为成功
3.elasticsearch-head安装
案例 master IP:10.1.1.28
仅安装在master即可
elasticsearch-head是集群管理、数据可视化、增删改查、查询语句可视化工具。
安装组件node.js
官网:https://nodejs.org/en/download/
具体地址:https://nodejs.org/dist/v12.13.1/node-v12.13.1-linux-x64.tar.xz
# cd /software
# wget https://nodejs.org/dist/v12.13.1/node-v12.13.1-linux-x64.tar.xz
# tar xf node-v12.13.1-linux-x64.tar.xz -C /usr/local/
# mv /usr/local/node-v12.13.1-linux-x64/ /usr/local/nodejs/
# ls /usr/local/nodejs/bin/npm
/usr/local/nodejs/bin/npm 确认有此命令
# ln -s /usr/local/nodejs/bin/npm /bin/npm
# ln -s /usr/local/nodejs/bin/node /bin/node
# cd /software
git或者手动下载
# git clone git://github.com/mobz/elasticsearch-head.git
# mv /software/elasticsearch-head/ /usr/local/elasticsearch-head
# mkdir /tmp/phantomjs/
# cd /tmp/phantomjs/
# wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
这个包挺大,网络不好的建议外部下载传入。
# cd /usr/local/elasticsearch-head/
# npm install --unsafe-perm --registry=http://registry.npm.taobao.org
npm安装后可能会有ERROR(红色)
再试一次,如果还是红色说明有问题。
如果再试之后,仅剩下WARN(黄色),则成功。
# cd /usr/local/elasticsearch-head/
# nohup npm run start &>nohup.out
成功则终端被占用,用PC浏览器访问9100端口
http://10.1.1.28:9100/
能看到图形化界面了。成功
4.使用图形化界面。
此处需要两台机器同时操作。
# echo 'http.cors.enabled: true' >> /etc/elasticsearch/elasticsearch.yml
# echo 'http.cors.allow-origin: "*"' >> /etc/elasticsearch/elasticsearch.yml
分别重启,稍等一两分钟 9200 9300端口被占用,视为成功。(要有耐心等)
# systemctl restart elasticsearch
# cd /usr/local/elasticsearch-head/
# nohup npm run start &>nohup.out
浏览器访问 http://主机IP:9100
搜索框中输入 http://从机IP:9200/ 点击连接。
绿了就成功了。
5.安装logstash
另开一台机器,安装logstash。内存1g+
安装Java,同上,最后source环境变量为止。
需要java,上面有
# cd /software
# wget https://artifacts.elastic.co/downloads/logstash/logstash-7.4.2.rpm
# yum install -y logstash-7.4.2.rpm
# cat /etc/logstash/logstash.yml |grep -v '#' |grep -v '^$'
path.data: /var/lib/logstash
path.logs: /var/log/logstash
path.config: /etc/logstash/conf.d/ #打开注释,并加上配置目录路径
http.host: "10.1.1.16" #打开注释,并改为logstash机器的IP
测试
# /usr/share/logstash/bin/logstash -e 'input {stdin {}} output {stdout {}}'
等候。。。
Successfully started Logstash API endpoint
视为成功。
6.收集日志
自制配置文件
# vim /etc/logstash/conf.d/自定义.conf
内容如下:
input {
file {
path => "/var/log/messages"
start_position => "beginning"
type => "messages"
}
file {
path => "/var/log/yum.log"
start_position => "beginning"
type => "yum"
}
}
output {
if [type] == "messages" {
elasticsearch {
hosts => ["10.1.1.28:9200"]
index => "message-%{+YYYY.MM.dd}"
}
}
if [type] == "yum" {
elasticsearch {
hosts => ["10.1.1.28:9200"]
index => "yum-%{+YYYY.MM.dd}"
}
}
}
结束
要注意input > file > path 的日志源文件要有可读权限
# chmod o+r /var/log/messages
# chmod o+r /var/log/yum.log
# /usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/test.conf &
或抛弃所有信息
# /usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/test.conf &> /dev/null
[1] 15694
如上给出一个pid。成功
终端上出现各种信息,如果没有报错,logstash没自动关闭。
访问URL:http://master的IP:9100/
集群概览会有新内容生成。
重启为
# pkill java
# /usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/test.conf &
7.filebeat轻量级收集日志
logstash体量大,运行繁重,但是他能接受跨服务器和多种其他服务数据的输入。
我们使用让每一台业务机中安装一个轻量级的filebeat进行日志收集,交给logstash。再转交给elasticsearch。
(转交的意义在于elasticsearch容易并发而宕机,logstash有队列pipeline保护)。
再某业务机中安装filebeat
# cd /software
# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.2-x86_64.rpm
# yum -y install filebeat-7.4.2-x86_64.rpm
# vi /etc/filebeat/filebeat.yml
# cat /etc/filebeat/filebeat.yml |grep -v '#' |grep -v '^$'
如下即可
filebeat.inputs:
- type: log
enabled: true #改为true
paths:
- /var/log/*.log #收集的日志路径
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 3
#filebeat收集日志直接传给elasticsearch请写这个
output.elasticsearch: #输出给es集群
hosts: ["elasticsearch主机的IP:9200"] #es集群节点ip
#filebeat收集日志直接传给logstash请写这个
output.logstash: 这两句非常重要,表示日志输出给logstash
hosts: ["logstash的IP:5044"] IP为logstash服务器的IP;端口5044对应logstash上的配置
#上面二选一
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
# systemctl stop filebeat
# systemctl start filebeat
当直接传给elasticsearch时,无需安装logstash
当由logstash转发时,要修改logstash的配置
# vim /etc/logstash/conf.d/自定义.conf
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["elasticsearch主机的IP:9200"]
index => "自定义名字-%{+YYYY.MM.dd}"
}
}
# pkill java
# /usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/自定义.conf &
8.elasticsearch的图形界面kibana
# cd /software
# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.4.2-x86_64.rpm
# yum -y install kibana-7.4.2-x86_64.rpm
# vi /etc/kibana/kibana.yml
# cat /etc/kibana/kibana.yml |grep -v '#' |grep -v '^$'
如下即可
server.port: 5601 #端口
server.host: "0.0.0.0" #监听所有,允许所有人能访问
elasticsearch.url: "http://10.1.1.19:9200" #ES集群的路径
logging.dest: /var/log/kibana.log #我这里加了kibana日志,方便排错与调试
日志需要手动创建
# touch /var/log/kibana.log
# chown kibana.kibana /var/log/kibana.log
# systemctl start kibana
# systemctl enable kibana
# ss -nltp
5601被占用表示成功。
然后kibana汉化
# cd /software
# wget https://github.com/anbai-inc/Kibana_Hanization/archive/master.zip
# unzip Kibana_Hanization-master.zip -d /usr/local
# cd /usr/local/Kibana_Hanization-master/
# python main.py kibana的安装目录
# python main.py /usr/share/kibana/
# systemctl stop kibana
# systemctl start kibana
等待....
恭喜,Kibana汉化完成!
验证:
9.总结
还差个kafka