一、环境规划与初始化配置
1. 服务器资源分配
IP地址 | 部署服务 | 主机名 |
---|---|---|
172.25.23.7 | ES + Kafka + Zookeeper + Kibana | node1 |
172.25.23.8 | ES + Kafka + Zookeeper + Filebeat | node2 |
172.25.23.9 | Kafka + Zookeeper + Apache + Logstash | node3 |
系统要求:
- 配置:4核CPU / 4GB内存 / 60GB磁盘
- 组件版本:Elasticsearch 5.5.0、JDK 1.8
日志系统架构图
apache—>filebeat—>kafka—>logstash—>elasticsearch—>kibana
2. 基础环境配置
(1) 主机名与Hosts绑定
# 所有节点执行(以node1为例)
hostnamectl set-hostname node1
echo "172.25.23.7 node1" >> /etc/hosts
echo "172.25.23.8 node2" >> /etc/hosts
echo "172.25.23.9 node3" >> /etc/hosts
修改完重启终端或执行命令bash
vi /etc/hosts
加入
172.25.23.7 node1172.25.23.8 node2172.25.23.9 node3
(2) 关闭防火墙与SELinux
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
(3) 安装Java环境
yum -y install java-1.8.0-openjdk
cat <<EOF >> /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
export PATH=\$PATH:\$JAVA_HOME/bin
EOF
source /etc/profile
安装Java
yum -y install java-1.8.0-*
vi /etc/profile
加入下面三行
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64export JRE_HOME=$JAVA_HOME/jreexport PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$MYCAT_HOME/bin
source /etc/profileecho $JAVA_HOME
二、Elasticsearch集群部署
1. 安装与基础配置(以node1为例)
cd /rootrpm -ivh elasticsearch-5.5.0.rpmsystemctl daemon-reloadsystemctl enable elasticsearch.service
cd /etc/elasticsearch/cp elasticsearch.yml elasticsearch.yml.bak
2.修改配置文件
vim /etc/elasticsearch/elasticsearch.yml--17--取消注释,指定集群名字cluster.name: zhang--23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2node.name: node1--33--取消注释,指定数据存放路径path.data: /data/elk_data--37--取消注释,指定日志存放路径path.logs: /var/log/elasticsearch/--43--取消注释,改为在启动的时候不锁定内存bootstrap.memory_lock: false--55--取消注释,设置监听地址,0.0.0.0代表所有地址network.host: 0.0.0.0--59--取消注释,ES 服务的默认监听端口为9200http.port: 9200--68--取消注释,集群发现通过单播实现,指定要发现的节点 node1、node2discovery.zen.ping.unicast.hosts: ["node1", "node2"]
Node1
Node2
grep -v "^#" /etc/elasticsearch/elasticsearch.yml
node1
Node2
3.创建数据目录并授权
mkdir -p /data/elk_datachown elasticsearch:elasticsearch /data/elk_data/systemctl start elasticsearchsystemctl enable --now elasticsearch.servicenetstat -antp | grep 9200
4、查看node1节点信息
curl http://node1:9200/_cluster/health?pretty
预期输出
{"cluster_name" : "es-cluster","status" : "green", # 集群健康状态"number_of_nodes" : 2 # 节点数量
}
实际访问输出 http://172.16.39.66:9200/
http://172.16.39.66:9200//_cluster/health?pretty
三、Elasticsearch 集群部署(在node2上操作)
1、前面步骤与node1节点一致
安装Java
yum -y install java-1.8.0-*
vi /etc/profile 加入下面三行export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64export JRE_HOME=$JAVA_HOME/jreexport PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$MYCAT_HOME/bin
source /etc/profileecho $JAVA_HOME
2、部署安装Elasticsearch软件
cd /rootrpm -ivh elasticsearch-5.5.0.rpmsystemctl daemon-reloadsystemctl enable elasticsearch.servicecd /etc/elasticsearch/cp elasticsearch.yml elasticsearch.yml.bak
配置Elasticsearch主配置文件
将node1节点配置文件复制过来scp 172.25.23.7:/etc/elasticsearch/elasticsearch.yml .
vim /etc/elasticsearch/elasticsearch.ymlgrep -v "^#" /etc/elasticsearch/elasticsearch.yml
3、创建数据存放路径并授权
mkdir -p /data/elk_datachown elasticsearch:elasticsearch /data/elk_data/systemctl daemon-reloadsystemctl enable --now elasticsearch.servicesystemctl start elasticsearchnetstat -antp | grep 9200
4、查看node2节点信息
http://172.16.39.70:9200/
http://172.16.39.70:9200/_cluster/health?pretty
由于es服务启动之后,访问界面比较简单,为了更好的查看索引库当中的信息,我们可以通过安装elasticsearch-head这个插件来实现,这个插件可以更方便快捷的看到es的管理界面。
5.创建测试索引(可以不创建)
curl -X PUT "node1:9200/index-demo" -H 'Content-Type: application/json' -d'
{"settings": { "number_of_shards": 3 }
}'
四、安装 Elasticsearch-head 可视化插件(node1和node2节点操作一样)
Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。
安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。
node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。
1.安装Node.js与依赖
上传软件包 node-v12.18.1-linux-x64.tar.gz 到/opt
yum install gcc gcc-c++ make -y
node1
Node2
cd /opttar xvf node-v12.18.1-linux-x64.tar.gz
node1
Node2
mkdir /usr/local/nodemv node-v12.18.1-linux-x64/* /usr/local/nodeecho "export PATH=$PATH:/usr/local/node/bin" >> ~/.bashrcsource ~/.bashrcnpm -v
2.安装 phantomjs
上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2到opt
cd /opttar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bincp phantomjs /usr/local/bin
3.安装 Elasticsearch-head 数据可视化工具
上传软件包 elasticsearch-head-5.0.0.zip 到/opt
cd /optunzip elasticsearch-head-5.0.0.zip
mv elasticsearch-head-5.0.0/* /usr/local/src/cd /usr/local/src/
修改为淘宝的源
npm config set registry http://registry.npm.taobao.orgnpm install
4.修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml
--末尾添加以下内容--
http.cors.enabled: true http.cors.allow-origin: "*"
systemctl restart elasticsearch
5.修改Gruntfile.js配置文件
vi Gruntfile.js
connect: {server: {options: {hostname: '172.25.23.7', //添加这行port: 9100,base: '.',keepalive: true}}}
6.修改app.js配置文件
cd _site/vi app.js
搜素XHR找到下面的位置(修改)
init: function(parent) {this._super();this.prefs = services.Preferences.instance();this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://172.25.23.7:9200"; //修改这里if( this.base_uri.charAt( this.base_uri.length - 1 ) !== "/" ) {// XHR request fails if the URL is not ending with a "/"this.base_uri += "/";}
7.启动 elasticsearch-head 服务
cd /usr/local/src/node_modules/grunt/bin./grunt server
8、通过 Elasticsearch-head查看Elasticsearch 信息
浏览器访问 http://172.25.23.7:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。
9、插入索引,进行测试
curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"lcdb","mesg":"lichen youshoujiuxing"}'
浏览器访问 http://172.25.23.7:9100/ 查看索引信息,可以看见索引默认被分片5个,并且有一个副本。
点击“数据浏览”,会发现在node1上创建的索引为 index-demo,类型为 test 的相关信息。
五、Logstash 部署
下载地址:https://www.elastic.co/cn/downloads/past-releases/logstash-5-5-1https://www.elastic.co/cn/downloads/past-releases/logstash-5-5-1
Logstash 一般部署在需要监控其日志的服务器。在本案例中,Logstash 部署在 Apache 服务器上,用于收集 Apache 服务器的日志信息并发送到 Elasticsearch。
1.安装httpd服务
yum -y install httpdsystemctl start httpdsystemctl status httpd
2、安装java环境
yum -y install java-1.8.0-*
vi /etc/profile加入下面三行
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64export JRE_HOME=$JAVA_HOME/jreexport PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$MYCAT_HOME/bin
source /etc/profileecho $JAVA_HOME
3、安装logstash
cd /optrpm -ivh logstash-5.5.1.rpm
systemctl start logstash.servicesystemctl enable logstash.serviceln -s /usr/share/logstash/bin/logstash /usr/local/bin/
4、测试 Logstash
4.1 Logstash 命令常用选项
-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
-t:测试配置文件是否正确,然后退出。
4.2 定义输入输出流
输入采用标准输入,输出采用标准输出(类似管道)
指定数据输入端口,默认为9600~9700
logstash -e "input { stdin{} } output { stdout{} }"
4.3 使用 rubydebug 输出详细格式显示,codec 为一种编解码器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
4.4 使用 Logstash 将信息写入 Elasticsearch 中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["172.16.39.66:9200"] } }'
结果不在标准输出显示,而是发送至 Elasticsearch 中,可浏览器访问 http://172.25.23.7:9100/ 查看索引信息和数据浏览。
5、定义logstash配置文件
Logstash 配置文件基本由三部分组成(根据需要选择使用)
input:表示从数据源采集数据,常见的数据源如Kafka、日志文件等
filter:表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式
output:表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch。
修logstash 配置文件,让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中
chmod +r /var/log/messages 给系统日志添加读权限cd /etc/logstash/conf.d/vim syslog.conf
input {file{path =>"/var/log/messages"type =>"system"start_position =>"beginning"}}output {elasticsearch {hosts => ["172.25.23.7:9200"]index =>"system-%{+YYYY.MM.dd}"}}
systemctl restart logstash.service
6、浏览器验证,查看索引信息
六、Kibana部署(Node1节点)
下载地址:https://www.elastic.co/cn/downloads/past-releases/kibana-5-5-1https://www.elastic.co/cn/downloads/past-releases/kibana-5-5-1
1.安装 Kibana
cd /optrpm -ivh kibana-5.5.1-x86_64.rpm
2.设置kibana的主配置文件
vim /etc/kibana/kibana.yml
--2--取消注释,Kiabana 服务的默认监听端口为5601
server.port: 5601
--7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
--21--取消注释,设置和 Elasticsearch 建立连接的地址和端口
elasticsearch.url: "http://172.25.23.7:9200"
--30--取消注释,设置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"
3.启动kibana服务
systemctl daemon-reloadsystemctl start kibana.servicesystemctl enable kibana.servicenetstat -antp | grep 5601
4.验证Kibana
浏览器访问http://172.16.39.66:5601
5.将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示
vim /etc/logstash/conf.d/apache_log.conf
input {file{path => "/etc/httpd/logs/access_log"type => "access"start_position => "beginning"}file{path => "/etc/httpd/logs/error_log"type => "error"start_position => "beginning"}}output {if [type] == "access" {elasticsearch {hosts => ["172.16.39.66:9200"]index => "apache_access-%{+YYYY.MM.dd}"}}if [type] == "error" {elasticsearch {hosts => ["172.16.39.66:9200"]index => "apache_error-%{+YYYY.MM.dd}"}}}
cd /etc/logstash/conf.d//usr/share/logstash/bin/logstash -f apache_log.conf 指定配置文件开启logstash
打开apache页面,多刷新几次
浏览器访问 http://172.25.23.7:9100 查看索引是否创建
创建访问日志索引
创建错误日志索引
访问apache可以刷新日志,kibana可以看到时间