ELK是Elasticsearch、Logstash、Kibana的简称
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据
官网链接:
https://www.elastic.co/elasticsearch
安装包下载
ELK各服务之间存在版本依赖关系,不同版本服务可能会出现不必要的麻烦,这里统一使用7.8.0版本。(下载速度较慢,不要轻易中断)
#elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-x86_64.rpm
#logstash
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.8.0.rpm
#kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.8.0-x86_64.rpm
下载完成后目录如下:
elasticsearch跟logstash运行需要依赖JDK,jdk版本不可低于1.8.0。elasticsearch-7.8.0中建议使用jdk11。
JDK下载地址
https://www.oracle.com/downloads/
[root@elk home]# ll
总用量 971040
-rw-r--r--. 1 root root 319213800 6月 24 19:47 elasticsearch-7.8.0-x86_64.rpm
-rw-r--r--. 1 root root 162971576 6月 24 19:47 jdk-11.0.7_linux-x64_bin.rpm
-rw-r--r--. 1 root root 344836026 6月 24 19:47 kibana-7.8.0-x86_64.rpm
-rw-r--r--. 1 root root 167314018 6月 24 19:47 logstash-7.8.0.rpm
单节点ELK安装
- 安装jdk,配置环境变量
rpm -ivh jdk-11.0.7_linux-x64_bin.rpm
#1 修改环境变量
vi /etc/profile
#2 profile文件尾部添加
export JAVA_HOME=/usr/java/jdk-11.0.7/
export PATH=$PATH:$JAVA_HOME
#3 保存退出
:wq
#4 source一把
source /etc/profile0
#5 验证jdk环境变量配置是否成功
java -version
java version "11.0.7" 2020-04-14 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.7+8-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.7+8-LTS, mixed mode)
- 安装es、logstash、kibana
es跟kibana需要指定非root用户启动,使用rpm方式安装程序会自动帮我们创建好elasticsearch用户跟kibana用户。修改配置文件后,可以直接通过systemctl以服务方式启动程序,不需要来回主动切换用户启动。
rpm -ivh elasticsearch-7.8.0-x86_64.rpm logstash-7.8.0.rpm kibana-7.8.0-x86_64.rpm
#安装完成后可以通过whereis命令查看安装目录
whereis elasticsearch
elasticsearch: /etc/elasticsearch /usr/share/elasticsearch
Elasticsearch
1 修改配置文件
vi /etc/elasticsearch/elasticsearch.yml;elk
为本机主机名,注意yaml格式,:后多一个空格
#设置主机名称
17 cluster.name: elk
#设置节点名称
23 node.name: elk
#设置数据存储目录
33 path.data: /var/lib/elasticsearch
#设置日志输出目录
37 path.logs: /var/log/elasticsearch
#设置访问ip
55 network.host: 192.168.8.32
#设置访问端口
59 http.port: 9200
#设置种子主机,可以设置多个
68 discovery.seed_hosts: ["elk"]
#设置初始主节点,可以设置多个
72 cluster.initial_master_nodes: ["elk"]
修改完成配置文件后保存退出
2 启动
#启动
systemctl start elasticsearch
#查看服务运行状态
systemctl status elasticsearch
#设置开机启动
systemctl enable elasticsearch
启动成功后可以通过浏览器访问 http://192.168.8.32:9200,返回如下
Logstash
logstash 在rpm安装过程中可能会有一点小插曲,如下:
Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
2020-06-28T21:36:47.947+08:00 [main] WARN FilenoUtil : Native subprocess control requires open access to sun.nio.ch
Pass '--add-opens java.base/sun.nio.ch=org.jruby.dist' or '=org.jruby.core' to enable.
NoMethodError: undefined method `split' for nil:NilClass
detect_systemd at /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/pleaserun-0.0.31/lib/pleaserun/detector.rb:33
detect_platform at /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/pleaserun-0.0.31/lib/pleaserun/detector.rb:24
detect at /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/pleaserun-0.0.31/lib/pleaserun/detector.rb:18
setup_defaults at /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/pleaserun-0.0.31/lib/pleaserun/cli.rb:153
execute at /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/pleaserun-0.0.31/lib/pleaserun/cli.rb:119
run at /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/clamp-0.6.5/lib/clamp/command.rb:67
run at /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/pleaserun-0.0.31/lib/pleaserun/cli.rb:114
run at /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/clamp-0.6.5/lib/clamp/command.rb:132
<main> at /usr/share/logstash/lib/systeminstall/pleasewrap.rb:28
./system-install:行88: systemd: 未找到命令
Unable to install system startup script for Logstash.
不要紧! 这是在将logstash服务注册到service时,Ruby语法错误所致(应当是Ruby版本差异原因)。我们依然可以通过手动方式启动,后面列出具体步骤。
安装完成后,配置文件目录位于:/etc/logstash 程序安装目录位于:/usr/share/logstash/
ls -l /etc/logstash/
总用量 40
drwxrwxr-x 2 root root 51 6月 28 15:57 conf.d
-rw-r--r-- 1 root root 2019 6月 15 05:33 jvm.options
-rw-r--r-- 1 root root 8958 6月 15 05:33 log4j2.properties
-rw-r--r-- 1 root root 342 6月 15 05:33 logstash-sample.conf
-rw-r--r-- 1 root root 10321 6月 28 15:55 logstash.yml
-rw-r--r-- 1 root root 285 6月 15 05:33 pipelines.yml
-rw------- 1 root root 1696 6月 15 05:33 startup.options
ls -l /usr/share/logstash/
总用量 644
drwxr-xr-x 2 logstash logstash 4096 6月 28 14:21 bin
-rw-r--r-- 1 logstash logstash 2276 6月 15 05:33 CONTRIBUTORS
drwxrwxr-x 2 logstash logstash 6 6月 15 05:33 data
-rw-r--r-- 1 logstash logstash 4041 6月 15 05:33 Gemfile
-rw-r--r-- 1 logstash logstash 22666 6月 15 05:33 Gemfile.lock
drwxr-xr-x 6 logstash logstash 80 6月 28 14:21 lib
-rw-r--r-- 1 logstash logstash 13675 6月 15 05:33 LICENSE.txt
drwxr-xr-x 4 logstash logstash 86 6月 28 14:21 logstash-core
drwxr-xr-x 3 logstash logstash 83 6月 28 14:21 logstash-core-plugin-api
drwxr-xr-x 4 logstash logstash 52 6月 28 14:21 modules
-rw-r--r-- 1 logstash logstash 601073 6月 15 05:33 NOTICE.TXT
drwxr-xr-x 3 logstash logstash 29 6月 28 14:21 tools
drwxr-xr-x 4 logstash logstash 31 6月 28 14:21 vendor
drwxr-xr-x 9 logstash logstash 4096 6月 28 14:22 x-pack
修改配置logstash.yml
# 节点名称
19 node.name: master
# 数据存储目录,非特殊要求保持默认即可
28 path.data: /var/lib/logstash
# 指定配置文件,支持统配符匹配 如:/etc/logstash/conf.d/*.conf,默认就是这个目录
73 path.config: /etc/logstash/conf.d/*.conf
# host
118 http.host: 192.168.8.38
# 日志输出目录
241 path.logs: /var/log/logstash
1 创建自定义conf文件
vi /etc/logstash/conf.d/logstash.conf 内容可参考 /etc/logstash/conf.d/logstash-sample.conf
logstash 配置有多种方式,下面我们拿一个最简单的syslog协议模板测试。指定输入通过syslog方式,输出指向es
#输入
input{
syslog{
type => "system-syslog"
host => "192.168.8.38"
#接收信息端口
port => "514"
}
}
#输出到console
output{
elasticsearch {
#es节点,可以多个
hosts => ["192.168.8.32:9200"]
#索引
index => "syslog-%{+YYYY.MM.dd}"
}
}
2 systemctl 启动
#启动
sudo systemctl start logstash
#查看启动状态,启动完成约10s左右
sudo systemctl status logstash -l
#启动报:SocketError
:exception=>#<SocketError: initialize: name or service not known>
SocketError问题
这是因为非root用户没有创建端口监听的权限,解决方式如下(修改User=root Group=root):
#编辑服务脚本
vi /etc/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"
Restart=always
WorkingDirectory=/
Nice=19
LimitNOFILE=16384
# When stopping, how long to wait before giving up and sending SIGKILL?
# Keep in mind that SIGKILL on a process can cause data loss.
TimeoutStopSec=infinity
[Install]
WantedBy=multi-user.target
#重新加载服务
sudo systemctl daemon-reload
#重新启动
sudo systemctl restart logstash
#查看syslog监听端口是否启用,如下启用成功
netstat -tlnp | grep 514
tcp6 0 0 :::514 :::* LISTEN 41299/java
3 自定义方式启动
#1 创建自定义启动脚本
vi /usr/share/logstash/start-logstash.sh
#2 写入内容
#!/bin/bash
nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf >/usr/share/logstash/logstash.log 2>&1 &
#3 保存退出
:wq
#4 添加可执行权限
chmod +755 /usr/share/logstash/start-logstash.sh
#5 启动
./start-logstash.sh
#6 查看日志
cat /usr/share/logstash/logstash.log
#查看syslog监听端口是否启用,如下启用成功
netstat -tlnp | grep 514
tcp6 0 0 :::514 :::* LISTEN 3299/java
Kibana
安装完成后,配置文件目录位于:/etc/kibana程序安装目录位于:/usr/share/kibana/
#配置目录
ls -l /etc/kibana/
总用量 8
-rw-r--r--. 1 root root 5261 6月 29 01:01 kibana.yml
#程序安装目录
ls -l /usr/share/kibana/
总用量 1864
drwxr-xr-x. 2 root root 61 6月 24 19:49 bin
drwxr-xr-x. 5 root root 40 6月 24 19:49 built_assets
drwxr-xr-x. 2 root root 23 6月 24 20:06 config
-rw-rw-r--. 1 root root 13675 6月 15 04:37 LICENSE.txt
drwxr-xr-x. 6 root root 101 6月 24 19:49 node
drwxr-xr-x. 1634 root root 45056 6月 24 19:49 node_modules
-rw-rw-r--. 1 root root 1794118 6月 15 04:37 NOTICE.txt
drwxr-xr-x. 3 kibana kibana 53 6月 24 19:51 optimize
-rw-rw-r--. 1 root root 738 6月 15 04:37 package.json
drwxrwxr-x. 2 kibana kibana 6 6月 15 04:37 plugins
-rw-rw-r--. 1 root root 4057 6月 15 04:37 README.txt
drwxr-xr-x. 11 root root 4096 6月 24 19:51 src
drwxr-xr-x. 2 root root 4096 6月 24 19:51 webpackShims
drwxr-xr-x. 5 root root 4096 6月 24 19:51 x-pack
1 修改配置文件
vi /etc/kibana/kibana.yml
#1 设置服务ui查看端口
2 server.port: 5601
#2 设置服务host
7 server.host: "192.168.8.32"
#3 es节点,可设置多个
28 elasticsearch.hosts: ["http://192.168.8.32:9200"]
#4 ui支持中文
115 i18n.locale: "zh-CN"
2 启动
#启动
sudo systemctl start kibana
#查看启动状态,启动完成约10s左右
sudo systemctl status kibana
3 UI查看
http://192.168.8.38:5601/
至此,ELK日志分析系统搭建完成。剩下工作便是根据项目需求,将收集到的日志筛选过滤,在kibana的ui当中绘制出图,达到监控需求。
kibana 使用入门可以参考 kibana7.8.0 Dashboard入门