官网下载地址:https://www.elastic.co/downloads
官网文档地址:https://www.elastic.co/guide/en/logstash/current/index.html
中文文档地址:http://udn.yyuap.com/doc/logstash-best-practice-cn/index.html
1. ELK的组成部分
ELK的组成部分由:elasticsearch、logstash、kibana、filebeat组成
elasticsearch:开源的分布式搜素引擎,提供搜索、分析、存储数据三大功能。它的特点:分布式、零配置、自动发现、索引自动分片等。
logstash:主要用来日志的搜集和分析、过滤日志工具,支持大量的数据获取方式。
kibana:提供日志分析的web界面,可以分析、搜索日志。
filebeat:隶属于beats。
2. 单集群的架构部署
这是最简单的一种ELK架构方式。优点是搭建简单,易于上手。缺点是Logstash耗资源较大,运行占用CPU和内存高。另外没有消息队列缓存,存在数据丢失隐患。
此架构由Logstash分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给远端服务器上的Elasticsearch进行存储。Elasticsearch将数据以分片的形式压缩存储并提供多种API供用户查询,操作。用户亦可以更直观的通过配置Kibana Web方便的对日志查询,并根据数据生成报表。
2.1 ELK部署
服务 | 服务器ip | 服务启动端口 |
---|---|---|
elasticsearch | 192.168.159.130 | 9200、9300 |
logstash | 192.168.159.131 | 9600 |
kibana | 192.168.159.132 | 5601 |
elasticsearch安装
下载地址:https://www.elastic.co/downloads 但是这种方式下载会非常缓慢
可以使用这个网址:https://mirrors.huaweicloud.com/ 里面搜索elasticsearch的rpm包
# 安装
[root@node2 ~]# rpm -ivh elasticsearch-6.8.1.rpm
# 查看rpm安装包的内容
[root@node2 ~]# rpm -ql elasticsearch
主要的文件内容
/etc/elasticsearch #配置文件目录
/usr/share/elasticsearch #主程序目录
/var/lib/elasticsearch #数据目录
/var/log/elasticsearch #日志存放目录
/var/run/elasticsearch #进程文件存放目录
/usr/lib/systemd/system/elasticsearch.service #系统启动脚本
#创建elasticsearch用户和组
groupadd elasticsearch
useradd elasticsearch -s /sbin/nologin
#目录权限更改
chown -R elasticsearch:elasticsearch /var/log/elasticsearch /var/lib/elasticsearch
#安装JDK,elasticsearch是基于java编译的所以需要jdk的支持
下载JDK安装包
tar -zxvf jdk-8u231-linux-x64.tar.gz -C /usr/lcoal
vim /etc/profile #增加如下配置,配置环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_231
export JRE_HOME=/usr/local/jdk1.8.0_231/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$HOME/bin:$HOME/.local/bin:$PATH
source /etc/profile #生效
ln -s /usr/local/jdk1.8.0_231/bin/java /usr/sbin
测试java
[root@node2 ~]# java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
#elasticsearch主配置文件
[root@node2 ~]# grep '^[a-Z]' /etc/elasticsearch/elasticsearch.yml
cluster.name: ELK-Cluster #集群名称
node.name: elk-node1 #节点名称
path.data: /var/lib/elasticsearch #data目录
path.logs: /var/log/elasticsearch #logs目录
bootstrap.memory_lock: true #服务启动的时候锁定足够的内存,防止数据写入swap
network.host: 0.0.0.0 #监听地址
http.port: 9200 #端口
discovery.zen.ping.unicast.hosts: ["192.168.159.130","192.168.159.131"] #自动发现主机
#修改内存限制
[root@node2 ~]# vim /usr/lib/systemd/system/elasticsearch.service
LimitNOFILE=65535 #指定打开文件最大数目
LimitNPROC=4096 #指定进程的最大数目
LimitMEMLOCK=infinity
#LimitAS=infinity #指定虚拟内存的最大大小
#LimitFSIZE=infinity #指定最大文件大小,infinity(无穷大)
[root@node2 ~]# vim /etc/elasticsearch/jvm.options
-Xms1g #最小内存大小,如何指定内存大小呢。一般设置为系统内存的一半,Xms=Xmx
-Xmx1g #最大内存大小
#修改系统文件配置
vim /etc/security/limits.conf
* soft nproc 10000
* hard nproc 10000
* soft nofile 65536
* hard nofile 65536
* soft memlock 32000
* hard memlock 32000
#elasticsearch服务启动
systemctl start elasticsearch.service
systemctl enbale elasticsearch.service
启动端口:9200访问端口、9300内部通信端口
[root@node2 ~]# netstat -tnlp | grep 5201
tcp6 0 0 :::9200 :::* LISTEN 5201/java
tcp6 0 0 :::9300 :::* LISTEN 5201/java
查看启动日志
[root@node2 ~]# tail -f /var/log/elasticsearch/ELK-Cluster.log
通过访问web地址http://192.168.159.130:9200/可以看到界面即表示成功
logstash安装
# 安装JDK
tar -zxvf jdk-8u231-linux-x64.tar.gz -C /usr/lcoal
vim /etc/profile #增加如下配置,配置环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_231
export JRE_HOME=/usr/local/jdk1.8.0_231/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$HOME/bin:$HOME/.local/bin:$PATH
source /etc/profile #生效
ln -s /usr/local/jdk1.8.0_231/bin/java /usr/sbin
#安装logstash
[root@node03 ~]# rpm -ivh logstash-6.8.1.rpm
[root@node03 ~]# rpm -ql logstash
主要的文件内容
/var/lib/logstash #数据目录
/var/log/logstash #日志目录
/etc/logstash/ #配置文件目录
/usr/share/logstash/ #主程序目录
/usr/lib/systemd/system/logstash.service #系统启动脚本
#启动脚本内容
[Unit]
Description=logstash
[Service]
Type=simple
User=logstash
Group=logstash
# Load env vars from /etc/default/ and /etc/sysconfig/ if they exist.
# Prefixing the path with '-' makes it try to load, but if the file doesn't
# exist, it continues onward.
EnvironmentFile=-/etc/default/logstash
EnvironmentFile=-/etc/sysconfig/logstash
ExecStart=/usr/share/logstash/bin/logstash "--path.settings" "/etc/logstash/" "--path.config" "/etc/logstash/conf.d"
Restart=always
WorkingDirectory=/
Nice=19
LimitNOFILE=16384
[Install]
WantedBy=multi-user.target
#添加logstash用户及授权目录
groupadd logstash
useradd logstash -s /sbin/nologin
chown -R logstash:logstash /usr/share/logstash/data/ #不然启动时候会报错
#配置文件
[root@node03 inputs]# grep '^[a-Z]' /etc/logstash/logstash.yml
path.data: /var/lib/logstash #数据存放目录
path.config: /etc/logstash/conf.d/*.conf #收集日志的配置文件
path.logs: /var/log/logstash #日志目录
#创建conf.d目录,用于存放匹配日志
mkdir -pv /etc/logstash/conf.d
#logstash服务启动
systemctl start logstash.service
systemctl enbale logstash.service
指定配置文件启动,这样启动会中断
/usr/share/logstash/bin/logstash -f /etc/logstash/logstash-sample.conf
后台启动
nohup /usr/share/logstash/bin/logstash -f /etc/logstash/logstash-sample.conf >> /var/log/logstash/nohup.out 2&>1 &
启动端口:9600
[root@node03 inputs]# netstat -tnlp |grep 14832
tcp6 0 0 127.0.0.1:9600 :::* LISTEN 14832/java
启动日志查看
[root@node03 inputs]# tail -f /var/log/logstash/logstash-plain.log
kibana安装
#安装kibana
[root@node03 ~]# rpm -ivh kibana-6.8.1.rpm
[root@node03 ~]# rpm -ql kibana
主要的文件内容
/var/lib/kibana #数据目录
/var/log/kibana #日志目录
/etc/kibana/ #配置文件目录
/usr/share/kibana/ #主程序目录
/usr/lib/systemd/system/kibana.service #系统启动脚本
#配置文件
[root@node04 kibana]# grep '^[a-Z]' /etc/kibana/kibana.yml
server.port: 5601 #端口
server.host: "0.0.0.0" #监听地址
elasticsearch.hosts: ["http://192.168.159.130:9200"] #elasticsearch集群地址
i18n.locale: "zh-CN" #中文
#kibana服务启动
systemctl start kibana.service
systemctl enbale kibana.service
启动端口:5601
[root@node04 kibana]# netstat -tnlp | grep 5601
tcp 0 0 0.0.0.0:5601 0.0.0.0:* LISTEN 4480/node
#查看kibana状态
http://192.168.159.132:5601/status