热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ELK日志服务器搭建

ELKELK是三个开源软件的缩写,分别表示:Elasticsearch,Logstash,Kibana,它们都是开源软件。新增

ELK

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

Filebeat隶属于Beats。目前Beats包含四种工具:





    1. Packetbeat(搜集网络流量数据)

    2. Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)

    3. Filebeat(搜集文件数据)

    4. Winlogbeat(搜集 Windows 事件日志数据)



技术分享图片


部署安装ELK服务器

环境准备 (需要java环境)



















ELK-1192.168.1.10
ELk-2192.168.1.20
apache192.168.1.30

修改主机名称

[root@localhost ~]# hostnamectl set-hostname elk-1
[root@localhost ~]# bash
[root@elk-1 ~]#
[root@localhost ~]# hostnamectl set-hostname elk-2
[root@localhost ~]# bash
[root@elk-2 ~]#

在 ELK-1 2 中 /etc/hosts 文件中添加域名解析

[root@elk-1 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.10 elk-1
192.168.1.20 elk-2

上传elasticsearch文件解压安装(ELK—1 2)

[root@elk-1 ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg 模板 图片 下载 桌面
elasticsearch-7.9.2-x86_64(新).rpm 公共 视频 文档 音乐
[root@elk-1 ~]# rpm -ivh elasticsearch-7.9.2-x86_64\(新\).rpm
警告:elasticsearch-7.9.2-x86_64(新).rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中... ################################# [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
正在升级/安装...
1:elasticsearch-0:7.9.2-1 ################################# [100%]
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service
Created elasticsearch keystore in /etc/elasticsearch/elasticsearch.keystore
[root@elk-1 ~]# systemctl daemon-reload
[root@elk-1 ~]# sudo systemctl enable elasticsearch.service
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.

更改配置文件(ELK-1 2)

[root@elk-1 ~]# vim /etc/elasticsearch/elasticsearch.yml
17:cluster.name: my-elk-cluster 集群名字
23:node.name: elk-1 节点名称
33:path.data: /data/elk_data 数据存放路径
37:path.logs: /var/log/elasticsearch/ 日志存放路径
43:bootstrap.memory_lock: false 不在启动的时候锁定内存
55:network.host: 0.0.0.0 提供服务绑定的 IP 地址,0.0.0.0 代表所有地址
59:http.port: 9200 侦听端口为 9200
68:discovery.seed_hosts: ["elk-1", "elk-2"] 集群中的主机
72:cluster.initial_master_nodes: ["elk-1"] 主节点
[root@elk-2 ~]# vim /etc/elasticsearch/elasticsearch.yml
17:cluster.name: my-elk-cluster 集群名字
23:node.name: elk-2 节点名称
33:path.data: /data/elk_data 数据存放路径
37:path.logs: /var/log/elasticsearch/ 日志存放路径
43:bootstrap.memory_lock: false 不在启动的时候锁定内存
55:network.host: 0.0.0.0 提供服务绑定的 IP 地址,0.0.0.0 代表所有地址
59:http.port: 9200 侦听端口为 9200
68:discovery.seed_hosts: ["elk-1", "elk-2"] 集群中的主机
72:cluster.initial_master_nodes: ["elk-1"] 主节点

创建文件所需要的目录(ELK-1 2)

[root@elk-2 ~]# mkdir -p /data/elk_data
[root@elk-2 ~]# mkdir -p /var/log/elasticsearch/
[root@elk-2 ~]# chown elasticsearch:elasticsearch /data/elk_data/
[root@elk-2 ~]# chown elasticsearch:elasticsearch /var/log/elasticsearch/
[root@elk-2 ~]#

开启elk(ELK-1 2)

[root@elk-1 ~]# systemctl start elasticsearch.service
[root@elk-1 ~]# netstat -anpt | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 43577/java

查看健康状态(查看集群的健康情况,可以看到 status 为 green 绿色)

http://192.168.1.10:9200/_cluster/health?pretty

http://192.168.1.20:9200/_cluster/health?pretty

http://192.168.1.10:9200/_cluster/state?pretty

http://192.168.1.20:9200/_cluster/state?pretty

技术分享图片

技术分享图片

技术分享图片

技术分享图片


上传node安装包安装(ELK-1)

[root@elk-1 ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg node-v12.13.0-linux-x64.tar 模板 图片 下载 桌面
elasticsearch-7.9.2-x86_64(新).rpm node-v12.13.0-linux-x64 公共 视频 文档 音乐
[root@elk-1 ~]# tar -vxf node-v12.13.0-linux-x64.tar
[root@elk-1 ~]# mv node-v12.13.0-linux-x64 /usr/local/nodesjs
[root@elk-1 ~]# vim /etc/profile
VERSION=v10.15.0
DISTRO=linux-x64
export PATH=/usr/local/nodesjs/bin:$PATH
[root@elk-1 ~]# source /etc/profile

安装es-head,上传安装包:es-head.tar.gz解压安装(ELK-1)

# 安装phantomjs
[root@elk-1 ~]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@elk-1 ~]# cd phantomjs-2.1.1-linux-x86_64/bin/
[root@elk-1 bin]# cp phantomjs /usr/local/bin/
[root@elk-1 ~]# git clone git://github.com/mobz/elasticsearch-head.git
[root@elk-1 ~]# cd elasticsearch-head/
[root@elk-1 elasticsearch-head]# npm install
[root@elk-1 elasticsearch-head]# npm run start &
[root@elk-1 elasticsearch-head]# netstat -anpt | grep 9100

修改 elasticsearch 主配置文件,添加如下内容,然后重启 elasticsearch 服务(ELK-1)

[root@elk-1 ~]# vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true 开启跨域访问支持,默认为 false
http.cors.allow-origin: "*" 跨域访问允许的域名地址
[root@elk-1 ~]# systemctl restart elasticsearch

通过浏览器进行访问:http://192.168.1.10:9100/,并连接集群

技术分享图片


可以看到集群很健康,健康值为 green 绿色。点击数据浏览,可以看到索引、类型为空

技术分享图片


通过命令插入一个测试索引,索引为 index-demo,类型为 test(ELK-1)

[root@elk-1 ~]# curl -XPUT ‘192.168.1.10:9200/index-demo/test/1?pretty&pretty‘ -H ‘Content-Type: application/json‘ -d ‘{ "user": "zhangsan","mesg":"hello world" }‘ # 回车
{
"_index" : "index-demo",
"_type" : "test",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
[root@elk-1 ~]#

刷新浏览器,可以看到创建成功的索引

技术分享图片


安装 logstash 并做一些日志搜集输出到 elasticsearch 中(ELK-1)

[root@elk-1 ~]# rpm -ivh logstash-7.9.2.rpm
警告:logstash-7.9.2.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:logstash-1:7.9.2-1 ################################# [100%]
Using provided startup.options file: /etc/logstash/startup.options
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/pleaserun-0.0.31/lib/pleaserun/platform/base.rb:112: warning: constant ::Fixnum is deprecated
Successfully created system startup script for Logstash
[root@elk-1 ~]# systemctl start logstash.service
[root@elk-1 ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

logstash 基本使用

Logstash 使用管道方式进行日志的搜集处理和输出。有点类似 linux 系统的管道命令 xxx | ccc | ddd,xxx 执行完了会执行 ccc,然后执行 ddd。 在 logstash 中,包括了三个阶段:
输入 input --> 处理 filter(不是必须的) --> 输出 output
每个阶段都由很多的插件配合工作,比如 file、elasticsearch、redis 等等。
每个阶段也可以指定多种方式,比如输出既可以输出到 elasticsearch 中,也可以指定到 stdout在控制台打印。
由于这种插件式的组织方式,使得 logstash 变得易于扩展和定制。
logstash 命令行中常用的命令: -f:通过这个命令可以指定 Logstash 的配置文件,根据配置文件配置 logstash
-e:后面跟着字符串,该字符串可以被当做 logstash 的配置(如果是“” 则默认使用 stdin
作为输入,stdout 作为输出)
-t:测试配置文件是否正确,然后退出

启动一个 logstash,-e:在命令行执行;input 输入,stdin 标准输入,是一个插件;output 输出,stdout:标准输出

[root@elk-1 ~]# logstash -e ‘input { stdin{} } output { stdout{} }‘
[INFO ] 2020-10-22 06:38:09.069 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com #输入
{
"@timestamp" => 2020-10-22T13:38:19.724Z,
"host" => "elk-1",
"@version" => "1",
"message" => "www.baidu.comwww.baidu.com"
}
www.sina.com.cn #输入
{
"@timestamp" => 2020-10-22T13:38:30.823Z,
"host" => "elk-1",
"@version" => "1",
"message" => "www.sina.com.cn"
}

使用 rubydebug 显示详细输出,codec 为一种编解码器

[root@elk-1 ~]# logstash -e ‘input { stdin{} } output { stdout{ codec =>rubydebug} }‘
22:54:23.075 [Api Webserver] INFO logstash.agent - Successfully started Logstash API
endpoint {:port=>9600}
www.baidu.com 输入
{
"@timestamp" => 2017-08-09T14:54:31.236Z,
"@version" => "1",
"host" => "elk-node1",
"message" => "www.baidu.com"
}
www.sina.com.cn 输入
{
"@timestamp" => 2017-08-09T14:54:39.412Z,
"@version" => "1",
"host" => "elk-node1",
"message" => "www.sina.com.cn"
}

使用 logstash 将信息写入到 elasticsearch 中

[root@elk-1 ~]# logstash -e ‘input { stdin{} } output { elasticsearch { hosts=> ["192.168.1.10:9200"]} }‘
[INFO ] 2020-10-22 06:40:44.995 [Ruby-0-Thread-5: :1] elasticsearch - Installing ILM policy {"policy"=>{"phases"=>{"hot"=>{"actions"=>{"rollover"=>{"max_size"=>"50gb", "max_age"=>"30d"}}}}}} to _ilm/policy/logstash-policy
www.baidu.com #输入
www.sina.com.cn
www.google.com

在 elasticsearch 中查看 logstash 新加的索引

技术分享图片


logstash 配置文件使用

logstash 配置文件基本上由三部分组成,input、output 以及用户需要才添加的 filter,
因此标准的配置文件格式如下:
input {...}
filter {...}
output {...}
在每个部分中,也可以指定多个访问方式,例如我想要指定两个日志来源文件,则可以这样写:
input {
file { path =>"/var/log/messages" type =>"syslog"}
file { path =>"/var/log/apache/access.log" type =>"apache"}
}
下面是一个收集系统日志的配置文件例子,将其放到/etc/logstash/conf.d/目录中,
logstash 启动的时候便会加载。注意要给 logstash 读取日志文件的权限

[root@elk-1 ~]# chmod o+r /var/log/messages
[root@elk-1 ~]# ll /var/log/messages
-rw----r--. 1 root root 746161 10月 22 06:55 /var/log/messages
[root@elk-1 ~]# cd /etc/logstash/conf.d/
[root@elk-1 conf.d]# vim system.conf
input {
file { 从文件中读取
path => "/var/log/messages" 文件路径
type => "system"
start_position => "beginning" 是否从头开始读取
}
}
output {
elasticsearch { 输出到 elasticsearch 中
hosts => ["192.168.1.10:9200"] elasticsearch 主机地址和端口
index => "system-%{+YYYY.MM.dd}" 索引名称
}
}

重启 logstash 服务

[root@elk-1 conf.d]# systemctl restart logstash

在浏览器中即可看到新加索引及其内容

技术分享图片

技术分享图片


安装Kibana(注意需要和elasticsearch,logstash同一版本)(ELK-1)

[root@elk-1 ~]# rpm -ivh kibana-5.5.3-x86_64.rpm
警告:kibana-5.5.3-x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:kibana-5.5.3-1 ################################# [100%]
[root@elk-1 ~]# systemctl enable kibana.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.

设置 kibana 的主配置文件/etc/kibana/kibana.yml

[root@elk-1 ~]# rpm -ivh kibana-7.9.2-x86_64.rpm
server.port: 5601 kibana 打开的端口
server.host: "0.0.0.0" kibana 侦听的地址
elasticsearch.url: "http://192.168.1.10:9200" 和 elasticsearch 建立联系
kibana.index: ".kibana" 在 elasticsearch 中添加.kibana 索引
[root@elk-1 ~]# systemctl start kibana.service

使用浏览器访问 192.168.1.10:5601,第一次登录需要添加一个 elasticsearch 索引,我们添加前面的索引 system-*

技术分享图片

技术分享图片

技术分享图片


点击 discover 进行查看

技术分享图片

技术分享图片


可以进行 fields 区域筛选,点击“Available Fields”中的“host”,然后点击添加“add”

技术分享图片


可以看到按照”host”筛选后的结果

技术分享图片


将 apache 服务器的日志添加到 elasticsearch 并通过 kibana 显示

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# curl 127.0.0.1
[root@localhost ~]# rpm -ivh logstash-7.9.2.rpm
[root@localhost ~]# systemctl enable logstash.service
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.

编写 logstash 配置文件 apache_log.conf 搜集 apache 日志并执行

[root@localhost ~]# cd /etc/logstash/conf.d/
[root@localhost conf.d]# vim http_log.conf
input {
file {
path => "/etc/httpd/logs/access_log"
type => "access"
start_position => "beginning"
}
file {
path => "/etc/httpd/logs/error_log"
type => "error"
start_position => "beginning"
}
}
output {
if [type] == "access" {
elasticsearch {
hosts => ["192.168.1.10:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.1.10:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
[root@localhost conf.d]# /usr/share/logstash/bin/logstash -f http_log.conf


推荐阅读
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • LoadRunner中的IP欺骗配置与实践
    为了确保服务器能够有效地区分不同的用户请求,避免多人使用同一IP地址造成的访问限制,可以通过配置IP欺骗来解决这一问题。本文将详细介绍IP欺骗的工作原理及其在LoadRunner中的具体配置步骤。 ... [详细]
  • 本文概述了在GNU/Linux系统中,动态库在链接和运行阶段的搜索路径及其指定方法,包括通过编译时参数、环境变量及系统配置文件等方式来控制动态库的查找路径。 ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • 本文探讨了Java编程语言中常用的两个比较操作符==和equals方法的区别及其应用场景。通过具体示例分析,帮助开发者更好地理解和使用这两个概念,特别是在处理基本数据类型和引用数据类型的比较时。 ... [详细]
  • 本文介绍如何使用 Python 计算两个时间戳之间的时间差,并将其转换为毫秒。示例代码展示了如何通过 `time` 和 `datetime` 模块实现这一功能。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 本文介绍了用户界面(User Interface, UI)的基本概念,以及在iOS应用程序中UIView及其子类的重要性和使用方式。文章详细探讨了UIView如何作为用户交互的核心组件,以及它与其他UI控件和业务逻辑的关系。 ... [详细]
  • 本文探讨了线性表中元素的删除方法,包括顺序表和链表的不同实现策略,以及这些策略在实际应用中的性能分析。 ... [详细]
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • 本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • LeetCode 102 - 二叉树层次遍历详解
    本文详细解析了LeetCode第102题——二叉树的层次遍历问题,提供了C++语言的实现代码,并对算法的核心思想和具体步骤进行了深入讲解。 ... [详细]
author-avatar
瓯源鞋楦头尾自动修平机
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有