单机部署 ELK
对于一个体量不大的系统,运行在单机上的 ELK 就足以胜任日志的处理任务了。本文介绍如何在单台服务器上安装并配置 ELK(elalasticsearch + logstash + kibana),并最终通过 filebeat 把日志数据发送给日志服务器(ELK)。整体的架构如下图所示(此图来自互联网):

本文的演示环境为 Ubuntu Server 18.04,ELK 和 filebeat 的版本都是 6.2.4。
安装 java 运行时
我们假设您已经有一台运行 Ubuntu Server 18.04 的主机了,所以安装步骤从 java 运行时开始。必须安装 java 运行时是因为 elasticsearch 和 logstash 都是 Java 程序。下面的命令安装 openjdk8:
$ apt update
$ apt install -y openjdk--jre-headless
安装完成后检查一下安装结果:
$ java -version

安装 elasticsearch
可以通过下面的命令安装 elasticsearch 6.2.4:
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
$ sudo echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-.x.list
$ sudo apt update
$ sudo apt install -y elasticsearch=6.2.
$ sudo systemctl daemon-reload
$ sudo systemctl enable elasticsearch.service
安装 kibana
可以通过下面的命令安装 kibana 6.2.4:
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
$ sudo echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-.x.list
$ sudo apt update
$ sudo apt install -y kibana=6.2.
$ sudo systemctl daemon-reload
$ sudo systemctl enable kibana.service
安装 logstash
笔者在通过上面的方式安装 logstash 6.2.4 的时候发生了错误,说是找不到 logstash 6.2.4:

所以直接从官网下载了 6.2.4 的安装包通过下面的命令进行本地安装:
$ sudo apt install ./logstash-6.2..deb $ sudo systemctl daemon-reload
$ sudo systemctl enable logstash.service
完整的安装脚本
可以通过下面的脚本一次完成 elasticsearch、kibana 和 logstash 的安装:
#!/bin/bash
# sudo ./installelk6.2.4.u1804.sh apt update
apt install -y openjdk--jre-headless
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-.x.list apt update apt install -y elasticsearch=6.2.
apt install -y kibana=6.2.
apt install -y ./logstash-6.2..deb systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl enable logstash.service
systemctl enable kibana.service
把上面的内容保存在 installelk6.2.4.u1804.sh 文件中,和下载的 logstash-6.2.4.deb 文件放在同一个目录下,并进入到该目录中,执行下面的命令进行安装:
$ chomd +x installelk6.2.4.u1804.sh
$ sudo ./installelk6.2.4.u1804.sh
为 elasticsearch 挂载一个大磁盘
elasticsearch 需要大容量的存储设备来保存日志数据,所以我们这里单独添加一块 1T 的磁盘来保存日志数据。
先在系统的根目录下创建 esdata 目录作为磁盘的挂载点,elasticsearch 中的数据和自身的日志将会保存到这个目录中:
$ sudo mkdir /esdata
我们添加的磁盘的文件设备名称为 /dev/sdb,下面就把磁盘挂载到 /esdata 目录。
先使用 fdisk 命令对磁盘进行分区:
$ (echo n; echo p; echo ; echo ; echo ; echo w) | sudo fdisk /dev/sdb
然后使用 mkfs 命令将文件系统写入分区:
$ sudo mkfs -t ext4 /dev/sdb1
最后把新的磁盘分区挂载到 /esdata 装载新磁盘使其在操作系统中可访问:
$ sudo mount /dev/sdb1 /esdata
查看挂载完成后的文件系统:
$ df -h

接下来设置 elasticsearch 用户作为该目录的所有者,这样就 elasticsearch 就能往目录下写文件了:
$ sudo chown elasticsearch:elasticsearch /esdata
$ sudo chmod /esdata
设置开机自动挂载
现在挂载的文件系统 /esdata 会在系统重启后丢掉,因此需要设置在开机时自动挂载这个文件系统。先通过下面的命令找到设备的 UUID:
$sudo -i blkid
输出的内容为类似于下面的一些行,其中的 UUID 是我们需要的:
/dev/sdb1: UUID="db048fa3-903b-4b85-a7ab-01c920283eeb" TYPE="ext4" PARTUUID="b0261bed-01"
在 /etc/fstab 文件中添加类似于以下内容的行,其中的 UUID 就是从上面得来的:
UUID=db048fa3-903b-4b85-a7ab-01c920283eeb /esdata ext4 defaults,nofail,barrier=
这样的设置完成后,文件系统会在开机时自动挂载。
修改 elasticsearch 数据和日志文件的存储位置
在 /etc/elasticsearch/elasticsearch.yml 文件中找 path.data 和 path.logs 的设置,并修改如下:
# ----------------------------------- Paths ------------------------------------
# Path to directory where to store the data (separate multiple locations by comma):
path.data: /esdata
#
# Path to log files:
path.logs: /esdata
配置 kibana
kibana 服务默认监听的端口号修为 5601,但是默认只有在本机才能访问!
要取消对访问者 IP 地址的限制,需要修改配置文件 /etc/kibana/kibana.yml 中的 server.host,把默认值 localhost 改为 0.0.0.0:
#server.host: "localhost"
server.host: "0.0.0.0"
配置 logstash
logstash 的配置文件为 /etc/logstash/logstash.yml 默认不需要修改。在 /etc/logstash/conf.d 目录下添加配置文件 beat2es.conf,内容如下:
input{
beats{
port =>
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "beat-test-%{+YYYY.MM.dd}"
sniffing => true
template_overwrite => true
}
}
该配置会让 logstash 服务监听 5044 端口接收数据:
*:
到此为止,我们已经完成了 elasticsearch、kibana 和 logstash 的安装和配置,下面启动这些服务:
$ sudo systemctl start elasticsearch.service
$ sudo systemctl start kibana.service
$ sudo systemctl start logstash.service
安装 filebeat
假设我们也在 Ubuntu Server 18.04 的环境中安装 filebeat 6.2.4。先从官网下载 filebeat 6.2.4 deb 包,或者直接运行下面的命令进行安装:
$ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-amd64.deb
$ sudo dpkg -i ./filebeat-6.2.-amd64.deb
$ sudo systemctl daemon-reload
$ sudo systemctl enable filebeat.service
验证安装:
$ filebeat version
filebeat version 6.2. (amd64), libbeat 6.2.
配置 filebeat
配置 filebeat 从文件收集日志
编辑配置文件 /etc/filebeat/filebeat.yml,在 filebeat.prospectors 段修改 type 为 log 中的内容:
- type: log
# Change to true to enable this prospector configuration.
enabled: true
# Paths that should be crawled and fetched. Glob based paths.
paths:
- /home/nick/work/test.log
把日志发送给 logstash
编辑配置文件 /etc/filebeat/filebeat.yml,在 output.logstash 段修改配置 中的内容:
output.logstash:
# The Logstash hosts
hosts: ["your log server ip:5044"]
多行事件编码(合并多行到一条记录)
在 filebeat.prospectors 配置块中添加下面的配置:
### Multiline options
multiline.pattern: '^\['
multiline.negate: true
multiline.match: after
注释掉 output.elasticsearch
同时要把 output.elasticsearch 的配置注释掉。
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
最后启动 filebeat 服务:
$ sudo systemctl start filebeat.service
测试一下
通过 echo 向 /home/nick/work/test.log 文件中追加 '[' 开头的行模拟日志记录:
echo "[exception:]" >> work/test.log
echo " at xxx" >> work/test.log
echo " at xxx" >> work/test.log
echo "[OK]" >> work/test.log
" at" 开头的行用来模拟程序中的异常堆栈。
在浏览器中打开 kibana,添加 beat-test* 模式的索引就可以看到日志记录了:

由于我们在 filebeat 的配置中设置了 multiline 处理,所以类似 " at" 开头的行会被认为是异常堆栈从而合并到一条记录中:

这样的设置在故障调查时会让异常堆栈看起来更友好些!
总结
ELK 本身是个体量比较大的日志系统(当然也可以用来干其它的事情),安装和配置都会有些坑。本文只是介绍如何部署一个袖珍的 demo 环境,方便大家开始了解和学习 ELK。
单机部署 ELK的更多相关文章
- Centos7单机部署ELK+x-pack
ELK分布式框架作为现在大数据时代分析日志的常为大家使用.现在我们就记录下单机Centos7部署ELK的过程和遇到的问题. 系统要求:Centos7(内核3.5及以上,2核4G) elk版本:6.2. ...
- Linux下单机部署ELK日志收集、分析环境
一.ELK简介 ELK是elastic 公司旗下三款产品ElasticSearch .Logstash .Kibana的首字母组合,主要用于日志收集.分析与报表展示. ELK Stack包含:Elas ...
- Centos7单机部署ELK
一. 简介 1.1 介绍 ELK是三个开源工具组成,简单解释如下: Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风 ...
- linux单机部署kafka(filebeat+elk组合)
filebeat+elk组合之kafka单机部署 准备: kafka下载链接地址:http://kafka.apache.org/downloads.html 在这里下载kafka_2.12-2.10 ...
- 被一位读者赶超,手摸手 Docker 部署 ELK Stack
被一位读者赶超,容器化部署 ELK Stack 你好,我是悟空. 被奇幻"催更" 最近有个读者,他叫"老王",外号"茴香豆泡酒",找我崔更 ...
- Hadoop系列之(一):Hadoop单机部署
1. Hadoop介绍 Hadoop是一个能够对海量数据进行分布式处理的系统架构. Hadoop框架的核心是:HDFS和MapReduce. HDFS分布式文件系统为海量的数据提供了存储, MapRe ...
- Ecstore安装篇-2.单机部署【linux】
单机部署实施-linux 单机部署实施-linux author :James,jimingsong@vip.qq.com since :2015-03-02 系统环境需求 软件来源 底层依赖 1. ...
- ETL作业调度软件TASKCTL4.1单机部署
单机部署,实际上就是将EM节点和一个Server节点安装到同一个地方.EM节点是TASKCTL服务端的最顶层,主要负责客户端与服务端之间的通信.Server节点是TASKCTL的调度服务控制层,也有A ...
- [原创]ubuntu14.04部署ELK+redis日志分析系统
ubuntu14.04部署ELK+redis日志分析系统 [环境] host1:172.17.0.4 搭建ELK+redis服务 host2:172.17.0.3 搭建logstash+nginx服务 ...
随机推荐
- Spring Boot(十四)RabbitMQ延迟队列
一.前言 延迟队列的使用场景:1.未按时支付的订单,30分钟过期之后取消订单:2.给活跃度比较低的用户间隔N天之后推送消息,提高活跃度:3.过1分钟给新注册会员的用户,发送注册邮件等. 实现延迟队列的 ...
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU特性介绍(2)- RT1052DVL6性能实测
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的性能. 在前面的文章 i.MXRT微控制器概览 里,痞子衡给大家简介过恩智浦半导体在2017年推出的新 ...
- Php中的goto用法
我们先举个简单示例: <?php goto LABEL; //这个标签自定义 echo '乔峰'; LABEL: echo '鸠摩智'; 以上例程会输出:鸠摩智 解释:goto 操作符可以用来跳 ...
- Java开发笔记(十一)常见的数学函数
前面介绍了Java编程的四则运算,虽然提供了基础的加减乘除符号,但是数学上还有其它运算符号,包括四舍五入用到的约等号≍.求绝对值的“| |”.开平方的“√ ̄”,这些运算符形态各异,而且并非ASCII码 ...
- 好用的开源库(一)——MaterialEditText
GIthub地址:https://github.com/rengwuxian/MaterialEditText#features 使用文档: 在android新推出的Material Design中对 ...
- Java AQS 概述
AQS 概述 AQS(队列同步器,AbstractQueuedSynchronizer),是用来构建锁或其他同步组件的核心基础框架(比如 ReentrantLock.ReentrantReadWrit ...
- Mybatis框架基础支持层——反射工具箱之泛型解析工具TypeParameterResolver(4)
简介:TypeParameterResolver是一个工具类,提供一系列的静态方法,去解析类中的字段.方法返回值.方法参数的类型. 在正式介绍TypeParameterResolver之前,先介绍一个 ...
- MySQL高级特性——绑定变量
从MySQL 4.1 版本开始,就支持服务器端的绑定变量,这大大提高了客户端和服务器端数据传输的效率 介绍 当创建一个绑定变量 SQL 时,客户端会向服务器发送一个SQL语句的原型.服务器端收到这个S ...
- vue中使用Element主题自定义肤色
一.搭建好项目的环境. 二.根据ElementUI官网的自定义主题(http://element.eleme.io/#/zh-CN/component/custom-theme)来安装[主题生成工具] ...
- vue webpack build时关闭debug和console
1.找到 webpack.prod.conf.js ,搜索 UglifyJsPlugin,添加配置 uglifyOptions: { compress: { warnings: false, drop ...