单机部署 ELK

https://www.zhulou.net/post/2170.html

对于一个体量不大的系统,运行在单机上的 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-8-jre-headless
安装完成后检查一下安装结果:

$ java -version

安装 elasticsearch
可以通过下面的命令安装 elasticsearch 6.2.4:

w g e t − q O − h t t p s : / / a r t i f a c t s . e l a s t i c . c o / G P G − K E Y − e l a s t i c s e a r c h ∣ s u d o a p t − k e y a d d − wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - wgetqOhttps://artifacts.elastic.co/GPGKEYelasticsearchsudoaptkeyaddsudoecho"deb https://artifacts.elastic.co/packages/6.x/apt stable main"|sudotee -a /etc/apt/sources.list.d/elastic-6.x.list s u d o a p t u p d a t e sudo apt update sudoaptupdate sudoaptinstall -y elasticsearch=6.2.4 s u d o s y s t e m c t l d a e m o n − r e l o a d sudo systemctl daemon-reload sudosystemctldaemonreloadsudo systemctl enable elasticsearch.service
安装 kibana
可以通过下面的命令安装 kibana 6.2.4:

w g e t − q O − h t t p s : / / a r t i f a c t s . e l a s t i c . c o / G P G − K E Y − e l a s t i c s e a r c h ∣ s u d o a p t − k e y a d d − wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - wgetqOhttps://artifacts.elastic.co/GPGKEYelasticsearchsudoaptkeyaddsudoecho"deb https://artifacts.elastic.co/packages/6.x/apt stable main"|tee -a /etc/apt/sources.list.d/elastic-6.x.list s u d o a p t u p d a t e sudo apt update sudoaptupdate sudoaptinstall -y kibana=6.2.4 s u d o s y s t e m c t l d a e m o n − r e l o a d sudo systemctl daemon-reload sudosystemctldaemonreloadsudo systemctl enable kibana.service
安装 logstash
笔者在通过上面的方式安装 logstash 6.2.4 的时候发生了错误,说是找不到 logstash 6.2.4:

所以直接从官网下载了 6.2.4 的安装包通过下面的命令进行本地安装:

s u d o a p t i n s t a l l . / l o g s t a s h − 6.2.4. d e b sudoaptinstall./logstash-6.2.4.deb sudoaptinstall./logstash6.2.4.debsudo systemctl daemon-reload$sudo systemctl enable logstash.service
完整的安装脚本
可以通过下面的脚本一次完成 elasticsearch、kibana 和 logstash 的安装:

#!/bin/bash#sudo./installelk6.2.4.u1804.sh apt updateapt install -y openjdk-8-jre-headlesswget -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-6.x.listapt updateapt install -y elasticsearch=6.2.4aptinstall -y kibana=6.2.4aptinstall -y ./logstash-6.2.4.deb systemctl daemon-reloadsystemctl enable elasticsearch.servicesystemctl enable logstash.servicesystemctl 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 中的数据和自身的日志将会保存到这个目录中:

$sudomkdir/esdata
我们添加的磁盘的文件设备名称为 /dev/sdb,下面就把磁盘挂载到 /esdata 目录。
先使用 fdisk 命令对磁盘进行分区:

$ (echon;echop;echo1;echo;echo;echow) | sudo fdisk /dev/sdb
然后使用 mkfs 命令将文件系统写入分区:

$sudo mkfs -t ext4 /dev/sdb1
最后把新的磁盘分区挂载到 /esdata 装载新磁盘使其在操作系统中可访问:

$sudomount /dev/sdb1 /esdata
查看挂载完成后的文件系统:

$df-h

接下来设置 elasticsearch 用户作为该目录的所有者,这样就 elasticsearch 就能往目录下写文件了:

s u d o c h o w n e l a s t i c s e a r c h : e l a s t i c s e a r c h / e s d a t a sudochown elasticsearch:elasticsearch /esdata sudochownelasticsearch:elasticsearch/esdatasudochmod750/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=012
这样的设置完成后,文件系统会在开机时自动挂载。

修改 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 =>5044 }}output { elasticsearch { hosts => [“localhost:9200”] index =>"beat-test-%{+YYYY.MM.dd}"sniffing=>truetemplate_overwrite=>true}}
该配置会让 logstash 服务监听 5044 端口接收数据:

*:5044
到此为止,我们已经完成了 elasticsearch、kibana 和 logstash 的安装和配置,下面启动这些服务:

s u d o s y s t e m c t l s t a r t e l a s t i c s e a r c h . s e r v i c e sudo systemctl start elasticsearch.service sudosystemctlstartelasticsearch.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 s u d o d p k g − i . / f i l e b e a t − 6.2.4 − a m d 64. d e b sudo dpkg -i ./filebeat-6.2.4-amd64.deb sudodpkgi./filebeat6.2.4amd64.debsudo systemctl daemon-reload$sudo systemctl enable filebeat.service
验证安装:

$ filebeat versionfilebeat version 6.2.4 (amd64), libbeat 6.2.4
配置 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 optionsmultiline.pattern: '^['multiline.negate:truemultiline.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.logecho" at xxx" >> work/test.logecho" at xxx" >> work/test.logecho"[OK]" >> work/test.log
" at"开头的行用来模拟程序中的异常堆栈。

在浏览器中打开 kibana,添加 beat-test* 模式的索引就可以看到日志记录了:

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

这样的设置在故障调查时会让异常堆栈看起来更友好些!

总结
ELK 本身是个体量比较大的日志系统(当然也可以用来干其它的事情),安装和配置都会有些坑。本文只是介绍如何部署一个袖珍的 demo 环境,方便大家开始了解和学习 ELK。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于ELK(Elasticsearch, Logstash, Kibana)单机部署,黄色状态通常表示有一些索引分片未分配到可用节点上。这可能是由于节点变动、索引创建或者删除操作导致的。下面是一些常见的解决方法: 1. 确认集群节点状态:使用Elasticsearch的API或者Kibana的管理界面来查看节点状态,确保所有节点都正常运行。 2. 查看分片分配情况:使用Elasticsearch的API或者Kibana的管理界面来查看分片分配情况,确认是否存在未分配的分片。 3. 分配未分配的分片:如果有未分配的分片,可以使用Elasticsearch的API手动将其分配到可用节点上。可以使用以下命令将未分配的索引分片重新分配到可用节点上: ``` POST /_cluster/reroute { "commands": [ { "allocate_replica": { "index": "your_index_name", "shard": your_shard_number, "node": "your_node_name", "allow_primary": true } } ] } ``` 请将`your_index_name`替换为你的索引名称,`your_shard_number`替换为分片号,`your_node_name`替换为目标节点名称。 4. 等待自动分配:如果你不想手动分配分片,可以等待一段时间,Elasticsearch会自动尝试将未分配的分片分配到可用节点上。 5. 调整集群配置:如果黄色状态持续存在,你可能需要调整集群的配置,增加可用节点或者分片副本数量。 需要注意的是,以上方法仅适用于ELK单机部署环境。如果你使用了多个节点的集群部署,更复杂的配置和操作可能会涉及到。建议参考Elasticsearch官方文档或者咨询相关专业人士进行进一步的故障排除和解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值