如何搭建 ELK【elasticsearch+logstash+kibana】日志分析系统

一、为什么需要日志分析系统?

日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误

往往单台机器的日志我们使用 grep、awk 等工具就能基本实现简单分析,但是当日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。

如果:

• 你有很多台机器
• 你有各种各样的Log

只要满足这两个条件其中之一,那么一套日志系统是很有必要的。优秀的日志系统可以让你及时发现问题,轻松追查故障原因,进而提高生产力。

二、什么是 ELK

ELKelasticsearch + logstash + kibanaELK 平台是一套完整的日志集中处理解决方案,将 ElasticSearchLogstashKiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。

在这里插入图片描述

  • Logstash:用于收集并处理日志,将日志信息存储到 Elasticsearch 里面
  • Elasticsearch:用于存储收集到的日志信息
  • Kibana :通过Web端的可视化界面来查看日志(数据可视化)

ELK 的工作原理

  1. 在所有需要收集日志的服务器上部署 Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash
  2. Logstash 收集日志,将日志格式化并输出到 Elasticsearch 中。
  3. Elasticsearch 对格式化后的数据进行索引和存储。
  4. Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。

三、搭建 ELK

1.安装 elasticsearch

https://blog.youkuaiyun.com/ShockChen7/article/details/142760578

2.安装kibana

https://blog.youkuaiyun.com/ShockChen7/article/details/142760578

3.安装logstash

1.拉取 logstash镜像

docker pull logstash:8.8.1 

2.创建并运行容器

使用以下命令创建一个新的 logstash 容器并将其启动:

docker run --name some-logstash \
  -e ES_JAVA_OPTS="-Xms1g -Xmx2g" \
  -e TZ=Asia/Shanghai \
  -p 5044:5044 \
  -p 5000:5000 \
  -d logstash:8.8.1 

创建挂载目录、复制数据卷

mkdir -vp /root/my-logstash
#赋于权限
sudo chown -R 1000:1000 /root/my-logstash
#复制数据卷
docker cp some-logstash:/usr/share/logstash/config /root/my-logstash/
docker cp some-logstash:/usr/share/logstash/pipeline /root/my-logstash/

注:下载的包一定要和 ElasticSearch 的版本一致,我这边选择的版本是8.8.1

3.配置

LogstashSettings 配置文件通常是 logstash.yml,这是 Logstash 的全局配置文件,用于设置 Logstash 运行的一些基本参数。

在本地编辑文件

vim /root/my-logstash/config/logstash.yml

logstash.yml 末尾加上以下配置,文件的作用是为 Logstash 配置全局参数,比如日志级别、管道线程数、队列类型等。

http.host: "0.0.0.0"
xpack.monitoring.enabled: true
# xpack.monitoring.elasticsearch.username: logstash_system  #es xpack账号密码
# xpack.monitoring.elasticsearch.password: "123456"
xpack.monitoring.elasticsearch.hosts: ["http://127.0.0.1:9200"]

修改 logstash.conf 为以下配置,默认的基础上,将 inputbeat 改为 tcp 端口 5044

vim /root/my-logstash/pipeline/logstash.conf
input {
   
   
  tcp {
   
   
    port => 5044
    ##格式json  否则中文会变成unicode编码
	codec => json_lines 
    
  }
}

output {
   
   
  elasticsearch {
   
   
    hosts => ["http://localhost:9200"]
    index => "my_log-%{+YYYY.MM.dd}"
    #user => "elastic" #es xpack账号密码
    #password => "changeme"
  }
}

注意:如果你的 es 运行在 docker 中,这里的配置中包括上面的,不能是 loc

### ELK 堆栈的日志管理和分析 #### 工作原理概述 ELK 是由 ElasticsearchLogstashKibana 组成的一个开源工具链,用于日志管理与分析。其基本工作流如下: - **Logstash** 负责从各种来源收集日志数据,并对其进行过滤和格式化后发送至 Elasticsearch[^1]。 - **Elasticsearch** 提供强大的搜索引擎功能,负责对接收到的数据进行索引和存储。 - **Kibana** 则作为前端界面,允许用户通过图形化的方式查询、分析以及可视化这些数据[^3]。 #### 安装与配置步骤说明 ##### 1. 安装 Elasticsearch Elasticsearch 是整个系统的基石,它提供了分布式搜索和数据分析的能力。安装过程中需要注意版本兼容性问题。下载地址可以通过官方链接获取[^2]。完成安装后需调整 `elasticsearch.yml` 文件中的集群名称、节点名称以及其他必要的网络设置参数以适应实际环境需求。 ##### 2. 部署 Logstash Logstash 主要承担着数据输入端的角色,可以从文件系统、数据库或其他服务中提取原始记录再经过一系列插件处理之后传送给下游组件即 Elasticsearch 实例群组里去。具体操作包括解压软件包到目标目录下然后编辑对应的 configuration file 来定义 pipeline 的行为模式比如 source type filter output destination等等。 ##### 3. 设置 Kibana 最后一步就是启动 Kibana 应用来连接已有的 ES 数据库实例从而实现交互式的探索体验。同样地也需要修改默认路径下的 kibana.config.json 或者其他形式的初始化脚本来指定正确的 backend URL 地址确保两者之间能够正常通信握手成功建立联系。 以下是简单的 Python 示例来演示如何向运行中的 logstash 发送消息: ```python import logging import socket def send_log_to_logstash(message): host = 'localhost' # 替换为您的logstash主机名/IP port = 5000 # 替换为您所使用的TCP端口号 try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) sock.sendall(bytes(message + '\n', 'utf-8')) sock.close() except Exception as e: logger.error(f"Failed to send message {message} due to error: {e}") if __name__ == "__main__": test_message = "This is a test log entry" send_log_to_logstash(test_message) ``` 此代码片段展示了怎样利用标准库里的套接字模块构建起基础版客户端程序以便于测试目的验证我们的pipeline是否按预期那样运作良好。 #### 总结 综上所述,通过合理规划各部分之间的协作关系再加上细致入微得当的各项设定就可以顺利达成基于ELK框架之上高效稳定可靠的解决方案来满足企业级应用场合当中对于海量结构化半结构性乃至完全非结构化的各类事件追踪审计等方面提出的苛刻要求了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值