linux之ELK

news2024/12/23 10:08:31

ELK概述

ELK是一套开源的日志分析系统,由elasticsearch+logstash+Kibana组成。

官网说明:https://www.elastic.co/cn/products

首先: 先一句话简单了解E,L,K这三个软件

elasticsearch: 分布式搜索引擎

logstash: 日志收集与过滤,输出给elasticsearch

Kibana: 图形化展示

elk下载地址:https://www.elastic.co/cn/downloads

 环境准备,四台主机

 主机名及主机名绑定

[root@vm1 ~]# cat /etc/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10	vm1.cluster.com	kibana
192.168.100.20	vm2.cluster.com	elasticsearch
192.168.100.30	vm2.cluster.com	logstash
192.168.100.50	vm2.cluster.com	filebeat

传到各个主机下中
scp /etc/hosts root@192.168.100.20:/etc/hosts
scp /etc/hosts root@192.168.100.30:/etc/hosts
scp /etc/hosts root@192.168.100.50:/etc/hosts

实现各个主机之间都能ping通

关闭防火墙和selinux

时钟同步

elasticsearch 

elasticsearch简介

Elasticsearch(简称ES)是一个开源的分布式搜索引擎,Elasticsearch还是一个分布式文档数据库。所以它 提供了大量数据的存储功能,快速的搜索与分析功能。

elasticsearch单机部署

第1步

 在elasticsearch服务器上(vm2),确认jdk

[root@vm2 ~]# yum -y install java-1.8.0*
[root@vm2 ~]# java -version
openjdk version "1.8.0_422"
OpenJDK Runtime Environment (build 1.8.0_422-b05)
OpenJDK 64-Bit Server VM (build 25.422-b05, mixed mode)

第2步

 es的安装,配置(我这里事前下载了他的包,直接进行安装就可以)

[root@vm2 ~]# rz -E
rz waiting to receive.
[root@vm2 ~]# ls
anaconda-ks.cfg  elasticsearch-6.5.2.rpm
[root@vm2 ~]# rpm -ivh elasticsearch-6.5.2.rpm 


如果没有软件包也可以通过
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.2.rpm
来进行下载

第3步

单机es的配置与服务启动

[root@vm2 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"
cluster.name: elk-cluster     可以自定义一个集群名称,不配置的话默认会取名为elasticsearch
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0             打开注释,并修改为监听所有
http.port: 9200                     打开注释,监听端口9200

重启服务

[root@vm2 ~]# systemctl restart elasticsearch
[root@vm2 ~]# systemctl enable elasticsearch
Created symlink /etc/systemd/system/multi-user.target.wants/elasticsearch.service → /usr/lib/systemd/system/elasticsearch.service.
[root@vm2 ~]# ss -anlt
State     Recv-Q    Send-Q       Local Address:Port         Peer Address:Port    Process    
LISTEN    0         128                0.0.0.0:22                0.0.0.0:*                  
LISTEN    0         4096                     *:9200                    *:*                  
LISTEN    0         128                   [::]:22                   [::]:*                  
LISTEN    0         4096                     *:9300                    *:*                  


此时9200和9300已启动

9200则是数据传输端口
9300端口是集群通信端口(我们暂时还没有配置集群,现在是单点elasticsearch)

第4步

查看状态,使用curl命令或浏览器访问http://192.168.100.20:9200/_cluster/health?pretty地址(IP为ES服务器IP)

此时"number_of_nodes": 1,
    "number_of_data_nodes": 1,

都为1,算不上是集群 

elasticsearch集群部署 

集群部署需要注意的

 配置参考文档: https://www.elastic.co/guide/en/elasticsearch/reference/index.html

首先在ES集群所有节点都安装ES

也需要像vm2主机一样下载java-1.8.0*

可以使用两台或两台以上ES做集群, 以下就是两台ES做集群的配置

vm1

[root@vm1 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"
cluster.name: elk-cluster
node.name: 192.168.100.10                 本机IP或主机名
node.master: false                         指定不为master节点
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.100.10", "192.168.100.20"]     集群所有节点IP

vm2

[root@vm2 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"
cluster.name: elk-cluster
node.name: 192.168.100.20                本机IP或主机名
node.master: true                         指定为master节点
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.100.10", "192.168.100.20"]        集群所有节点IP

两台主机重启服务

[root@vm1 ~]# systemctl restart elasticsearch
[root@vm1 ~]# systemctl enable elasticsearch
[root@vm2 ~]# systemctl restart elasticsearch

查看状态,访问集群中的任何一个节点都可以,集群中两个节点,都为数据节点

elasticsearch基础概念 

主要的基础概念有:Node, Index,Type,Document,Field,shard和replicas

  • Node(节点):运行单个ES实例的服务器
  • Cluster(集群):一个或多个节点构成集群
  • Index(索引):索引是多个文档的集合
  • Type(类型):一个Index可以定义一种或多种类型,将Document逻辑分组
  • Document(文档):Index里每条记录称为Document,若干文档构建一个
  • Index Field(字段):ES存储的最小单元
  • Shards(分片):ES将Index分为若干份,每一份就是一个分片
  • Replicas(副本):Index的一份或多份副本

ES是分布式搜索引擎,每个索引有一个或多个分片(shard),索引的数据被分配到各个分片上。你可以看 作是一份数据分成了多份给不同的节点。

当ES集群增加或删除节点时,shard会在多个节点中均衡分配。默认是5个primary shard(主分片)和1个 replica shard(副本,用于容错)。 

elaticsearch基础API操作

前面我们通过http://192.168.100.10:9200/_cluster/health?pretty查看ES集群状态,其实就是它的一种API操作。

API是什么

API(Application Programming Interface)应用程序编程接口,就是无需访问程序源码或理解内部工 作机制就能实现一些相关功能的接口。

RestFul API 格式 

elasticseearch的API很多,举例如下 

更多API参考: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/index.html 

查看节点信息

[root@vm2 ~]# curl http://192.168.100.20:9200/_cat/nodes?v
ip             heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.100.10           15          78   0    0.00    0.00     0.00 di        -      192.168.100.10
192.168.100.20           13          72   0    0.00    0.00     0.00 mdi       *      192.168.100.20

查看索引信息 

此时无任何索引

新增索引

[root@vm2 ~]# curl -X PUT http://192.168.100.20:9200/nginx_access_log
/// 新增索引
{"acknowledged":true,"shards_acknowledged":true,"index":"nginx_access_log"}[root@vm2 ~]# 

查看

[root@vm2 ~]# curl http://192.168.100.20:9200/_cat/indices?v
health status index            uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   nginx_access_log 5GyRdXX8TgC7nknkth_azw   5   1          0            0      2.2kb          1.1kb

索引状态

green:所有的主分片和副本分片都已分配。你的集群是100%可用的。

yellow:所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依 然是完整的。不过,你的高可用性在某种程度上被弱化。如果 更多的 分片消失,你就会丢数据了。把 yellow 想象成一个需要及时调查的警告。

red:至少一个主分片(以及它的全部副本)都在缺失中。这意味着你在缺少数据:搜索只能返回部分数 据,而分配到这个分片上的写入请求会返回一个异常。

 删除索引

[root@vm2 ~]# curl -X DELETE http://192.168.100.20:9200/nginx_access_log
{"acknowledged":true

ES查询语句-(参考)

ES提供一种可用于执行查询JSON式的语言,被称为Query DSL。

查询匹配条件: match_all

  • from
  • size
  • match
  • bool
  • range

查询应用案例:

导入数据源

使用官方提供的示例数据:

下载并导入进elasticsearch,此时accounts.json已经下载好了

//导入进elasticsearch

[root@vm2 ~]# curl -H "Content-Type: application/json" -XPOST "192.168.100.20:9200/bank/_doc/_bulk?pretty&refresh" --data-binary "@accounts.json"

查询确认
[root@vm2 ~]# curl "192.168.100.20:9200/_cat/indices?v"
health status index            uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   nginx_access_log F59JRNR3SeGmEtacdMAxAA   5   1          0            0      2.5kb          1.2kb
green  open   bank             SaC5YDx_RMitUazz1-GPQw   5   1       1000            0    957.6kb        482.8kb

查询bank索引的数据(使用查询字符串进行查询)

[root@vm2 ~]# curl -X GET "192.168.100.20:9200/bank/_search?q=*&sort=account_number:asc&pretty"




说明:
默认结果为10条
_search 属于一类API,用于执行查询操作
q=* ES批量索引中的所有文档
sort=account_number:asc 表示根据account_number按升序对结果排序
pretty调整显示格式

查询bank索引的数据 (使用json格式进行查询)

[root@vm2 ~]# curl -X GET "192.168.100.20:9200/bank/_search" -H 'Content-Type:application/json' -d'
> {
> "query": { "match_all": {} },
> "sort": [
> { "account_number": "asc" }
> ]
> }
> '

查询结果

 查询匹配动作及案例:
  • from
  • size
  • 除了query参数外,还可以传递其他参数影响查询结果,比如前面提到的sort,接下来使用的 size
    [root@vm2 ~]# curl -X GET "192.168.100.20:9200/bank/_search?pretty" -H 'Content-Type:application/json' -d'
    
    {
    "query": { "match_all": {} },
    "size": 1
    }'
    
    
    查询结果
    {
      "took" : 7,
      "timed_out" : false,
      "_shards" : {
        "total" : 5,
        "successful" : 5,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : 1000,
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "bank",
            "_type" : "_doc",
            "_id" : "25",
            "_score" : 1.0,
            "_source" : {
              "account_number" : 25,
              "balance" : 40540,
              "firstname" : "Virginia",
              "lastname" : "Ayala",
              "age" : 39,
              "gender" : "F",
              "address" : "171 Putnam Avenue",
              "employer" : "Filodyne",
              "email" : "virginiaayala@filodyne.com",
              "city" : "Nicholson",
              "state" : "PA"
            }
          }
        ]
      }
    }
    

    指定位置与查询条数

[root@vm2 ~]# curl -X GET "192.168.100.20:9200/bank/_search?pretty" -H 'Content-Type:
application/json' -d'
{
"query": { "match_all": {} },
"from": 0,
"size": 2
}
'
from 0表示从第1个开始
size 指定查询的个数

示例: 查询account_number从第501条到510条的数据

curl -X GET "192.168.100.20:9200/bank/_search?pretty" -H 'Content-Type:
application/json' -d'
{
"query": { "match_all": {} },
"from": 500,
"size": 10,
"sort": [
{ "account_number": "asc" }
]
}
' 2>/dev/null |grep account_number
  • 匹配查询字段

返回_source字段中的片段字段

[root@vm2 ~]# curl -X GET "192.168.100.20:9200/bank/_search?pretty" -H 'Content-Type:
application/json' -d'
{
"query": { "match_all": {} },
"_source": ["account_number", "balance"]
}
'
  • match 基本搜索查询
  • 针对特定字段或字段集合进行搜索

查询编号为20的账户

[root@vm2 ~]# curl -X GET "192.168.100.20:9200/bank/_search?pretty" -H 'Content-Type:
application/json' -d'
{
"query": { "match": { "account_number": 20 } }
}
'

返回地址中包含mill的账户

[root@vm2 ~]# curl -X GET "192.168.100.20:9200/bank/_search?pretty" -H 'Content-Type:
application/json' -d'
{
"query": { "match": { "address": "mill" } }
}
'

 返回地址有包含mill或lane的所有账户

[root@vm2 ~]# curl -X GET "192.168.100.20:9200/bank/_search?pretty" -H 'Content-Type:
application/json' -d'
{
"query": { "match": { "address": "mill lane" } } # 空格就是或的关系
}
'

bool

bool must 查询的字段必须同时存在
查询包含mill和lane的所有账户
[root@vm2 ~]# curl -X GET "192.168.100.20:9200/bank/_search?pretty" -H 'Content-Type:
application/json' -d'
{
"query": {
"bool": {
"must": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}
'
bool should 查询的字段仅存在一即可
查询包含mill或lane的所有账户
[root@vm2 ~]# curl -X GET "192.168.100.20:9200/bank/_search?pretty" -H 'Content-Type:
application/json' -d'
{
"query": {
"bool": {
"should": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}
'

range

  • 指定区间内的数字或者时间
  • 操作符:gt大于,gte大于等于,lt小于,lte小于等于

查询余额大于或等于20000且小于等于30000的账户

[root@vm2 ~]# curl -X GET "10.1.1.12:9200/bank/_search?pretty" -H 'Content-Type:
application/json' -d'
{
"query": {
"bool": {
"must": { "match_all": {} },
"filter": {
"range": {
"balance": {
"gte": 20000,
"lte": 30000
}
}
}
}
}
}
'

elasticsearch-head

elasticsearch-head是集群管理、数据可视化、增删改查、查询语句可视化工具。从ES5版本后安装方式 和ES2以上的版本有很大的不同,在ES2中可以直接在bin目录下执行plugin install xxxx 来进行安装,但是 在ES5中这种安装方式变了,要想在ES5中安装Elasticsearch Head必须要安装NodeJs,然后通过NodeJS来 启动Head。

官网地址:https://github.com/mobz/elasticsearch-head

elasticsearch-head安装 

第一步

 nodejs下载页面: https://nodejs.org/en/download/

 这里我们已经下载好了,直接上传到终端

第二步

安装nodejs
[root@vm2 ~]# ls
accounts.json  anaconda-ks.cfg  elasticsearch-6.5.2.rpm  node-v10.24.1-linux-x64.tar.xz
[root@vm2 ~]# tar -xf node-v10.24.1-linux-x64.tar.xz -C /usr/local/
[root@vm2 ~]# cd /usr/local/
[root@vm2 local]# ls
bin  etc  games  include  lib  lib64  libexec  node-v10.24.1-linux-x64  sbin  share  src
[root@vm2 local]# mv /usr/local/node-v10.24.1-linux-x64/ /usr/local/nodejs/
[root@vm2 local]# ls /usr/local/nodejs/bin/npm 
/usr/local/nodejs/bin/npm                        // 确认有此命令
[root@vm2 local]# ln -s /usr/local/nodejs/bin/npm /bin/npm
[root@vm2 local]# ln -s /usr/local/nodejs/bin/node /bin/node

第三步

安装es-head
安装方法1(需要网速好)
[root@vm2 ~]# git clone git://github.com/mobz/elasticsearch-head.git
[root@vm2 ~]# cd elasticsearch-head
先使用npm安装grunt
npm(node package manager):node包管理工具,类似yum
Grunt是基于Node.js的项目构建工具
[root@vm2 elasticsearch-head]# npm install -g grunt-cli
安装时间较久,还会在网上下载phantomjs包
[root@vm2 elasticsearch-head]# npm install

安装可能有很多错误,(重点是注意红色的ERR!,黄色的WARN不用管

解决方法

npm install phantomjs-prebuilt@2.1.16 --ignore-script --registry=http://registry.npm.taobao.org

安装方法二

将下载好的包上传上去,再进行解压安装

适用于网速慢

下载好需要用到的工具
[root@vm2 local]# yum -y install unzip


[root@vm2 ~]# rz -E
rz waiting to receive.
[root@vm2 ~]# ls
accounts.json    elasticsearch-6.5.2.rpm        node-v10.24.1-linux-x64.tar.xz
anaconda-ks.cfg  elasticsearch-head-master.zip



安装
[root@vm2 ~]# unzip elasticsearch-head-master.zip -d /usr/local/

[root@vm2 ~]# mv /usr/local/elasticsearch-head-master/ /usr/local/es-head/
[root@vm2 ~]# cd /usr/local/es-head/
[root@vm2 es-head]# npm install -g grunt-cli --
registry=http://registry.npm.taobao.org


[root@vm2 es-head]# npm install --registry=http://registry.npm.taobao.org
/// 安装的时候可能出现报错,上面又解决方法
解决以后再进行一次:npm install --registry=http://registry.npm.taobao.org

启动
[root@vm2 es-head]# nohup npm run start &

浏览器访问

浏览器访问 http://es-head节点IP:9100

此时健康值未连接

 第四步

 修改ES集群配置文件,并重启服务

[root@vm1 ~]# systemctl restart elasticsearch.service 
[root@vm1 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"
cluster.name: elk-cluster
node.name: 192.168.100.10
node.master: false
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.100.10", "192.168.100.20"]

http.cors.enabled: true
http.cors.allow-origin: "*"
 加上这两行



这一台主机也一样
[root@vm2 es-head]# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"
cluster.name: elk-cluster
node.name: 192.168.100.20
node.master: true
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.100.10", "192.168.100.20"]
http.cors.enabled: true
http.cors.allow-origin: "*" 

重启服务

再次连接就可以查看到信息了

新建索引

删除此索引

 

es-head查询验证 

 

 

logstash 

logstash简介

logstash是一个开源的数据采集工具,通过数据源采集数据.然后进行过滤,并自定义格式输出到目的地。

数据分为:

  • 结构化数据 如:mysql数据库里的表等
  • 半结构化数据 如: xml,yaml,json等
  • 非结构化数据 如:文档,图片,音频,视频等

ogstash可以采集任何格式的数据,当然我们这里主要是讨论采集系统日志,服务日志等日志类型数据。

官方产品介绍:https://www.elastic.co/cn/products/logstash

input插件: 用于导入日志源 (配置必须)

https://www.elastic.co/guide/en/logstash/current/input-plugins.html

filter插件: 用于过滤(不是配置必须的 

https://www.elastic.co/guide/en/logstash/current/filter-plugins.html

output插件: 用于导出(配置必须)

https://www.elastic.co/guide/en/logstash/current/output-plugins.html

logstash部署

在logstash服务器上确认openjdk安装

[root@vm3 ~]# java -version
openjdk version "1.8.0_422"
OpenJDK Runtime Environment (build 1.8.0_422-b05)
OpenJDK 64-Bit Server VM (build 25.422-b05, mixed mode)

在logstash服务器上安装logstash

将下载好的包传到服务器进行安装

[root@vm3 ~]# rz -E
rz waiting to receive.
[root@vm3 ~]# ls
anaconda-ks.cfg  logstash-6.5.2.rpm
[root@vm3 ~]# rpm -ivh logstash-6.5.2.rpm 
warning: logstash-6.5.2.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:logstash-1:6.5.2-1               ################################# [100%]
Using provided startup.options file: /etc/logstash/startup.options
Successfully created system startup script for Logstash

配置logstash主配置文件

[root@vm3 logstash]# vim logstash.yml 
[root@vm3 logstash]# cat /etc/logstash/logstash.yml |grep -v '#' |grep -v '^$'
path.data: /var/lib/logstash
path.config: /etc/logstash/conf.d/                打开注释,并加上配置目录路径
http.host: "192.168.100.30"                        打开注释,并改为本机IP
http.port: 9600-9700                                打开注释
path.logs: /var/log/logstash

启动测试

[root@vm3 logstash]# cd /usr/share/logstash/bin
[root@vm3 bin]#  ./logstash -e 'input {stdin {}} output {stdout {}}'

关闭启动

CTRL+C可以关闭

另一种验证方法:
上述测试还可以使用如下方法进行:
[root@vm3]# vim /etc/logstash/conf.d/test.conf
input {
stdin {
}
}
filter {
}
output {
stdout {
codec => rubydebug
}
}
[root@vm3 bin]# pwd
/usr/share/logstash/bin
[root@vm3 bin]# ./logstash --path.settings /etc/logstash -f
/etc/logstash/conf.d/test.conf -t
......
Config Validation Result: OK. Exiting Logstash

--path.settings 指定logstash主配置文件目录
-f 指定片段配置文件
-t 测试配置文件是否正确
codec => rubydebug这句可写可不定,默认就是这种输出方式



[root@vm3 bin]#  ./logstash --path.settings /etc/logstash -r -f /etc/logstash/conf.d/test.conf
........
[2024-08-20T15:34:19,739][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}

{
      "@version" => "1",
    "@timestamp" => 2024-08-20T07:34:26.185Z,
       "message" => "",
          "host" => "vm3.cluster.com"
}
chengcheng
{
      "@version" => "1",
    "@timestamp" => 2024-08-20T07:34:30.725Z,
       "message" => "chengcheng",
          "host" => "vm3.cluster.com"
}
apple         
{
      "@version" => "1",
    "@timestamp" => 2024-08-20T07:34:42.708Z,
       "message" => "apple",
          "host" => "vm3.cluster.com"
}

-r参数很强大,会动态装载配置文件,也就是说启动后,可以不用重启修改配置文件

日志采集 

采集messages日志

这里以/var/log/messages为例,只定义input输入和output输出,不考虑过滤

[root@vm3 bin]# vim /etc/logstash/conf.d/test.conf
[root@vm3 bin]# cat /etc/logstash/conf.d/test.conf 
input {
	file {
		path => "/var/log/messages"
		start_position => "beginning"
	}
}
output {
	elasticsearch{
		hosts => ["192.168.100.20:9200"]
		index => "test-%{+YYYY.MM.dd}"
	}
}



[root@vm3 bin]# ./logstash --path.settings /etc/logstash/ -r -f
/etc/logstash/conf.d/test.conf &
后台运行如果要杀掉,请使用pkill java或ps查看PID再kill -9清除
通过浏览器访问es-head验证

logstash输出到es的索引

 

 logstash上传上来的/var/log/messages里的日志文件

练习 

在logstash那台服务器上做一些操作(比如,重启下sshd服务), 让/var/log/message有新的日志信息, 然后验证es-head里的数据。

[root@vm3 bin]# systemctl restart sshd

es-head验证

kill掉logstash进程(相当于关闭), 也做一些操作让/var/log/message日志有更新,然后再次启动 logstash。 

[root@vm3 bin]# ps -ef |grep java
找到进程号然后杀死
[root@vm3 bin]# kill -9 1496
[root@vm3 bin]# ps -ef |grep java
root        1561     675  0 16:09 pts/0    00:00:00 grep --color=auto java
[1]+  Killed                  ./logstash --path.settings /etc/logstash/ -r -f /etc/logstash/conf.d/test.conf

采集更多的日志

[root@vm3 ~]# cat /etc/logstash/conf.d/test.conf 
input {
	file {
		path => "/var/log/messages"
		start_position => "beginning"
		type => "messages"
	}

	file {
		path => "/var/log/dnf.log"
		start_position => "beginning"
		type => "dnf"
	}
}

filter {
}
output {
	if [type] == "messages" {
	elasticsearch {
		hosts => ["192.168.100.10:9200","192.168.100.20:9200"]
		index => "messages-%{+YYYY-MM-dd}"
		}
	}

	if [type] == "dnf" {
	elasticsearch {
		hosts => ["192.168.100.10:9200","192.168.100.20:9200"]
		index => "yum-%{+YYYY-MM-dd}"
		}
	}
}



启动
[root@vm3 bin]# ./logstash --path.settings /etc/logstash/ -r -f
/etc/logstash/conf.d/test.conf &
...........
[2024-08-20T16:30:38,396][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}

查看端口
[root@vm3 bin]# ss -anlt
State    Recv-Q   Send-Q               Local Address:Port     Peer Address:Port   Process   
LISTEN   0        128                        0.0.0.0:22            0.0.0.0:*                
LISTEN   0        50         [::ffff:192.168.100.30]:9600                *:*                
LISTEN   0        128                           [::]:22               [::]:*     

9600已启动

通过浏览器访问es-head验证

此时执行一句 

yum -y install vsftpd

来做验证

 

kibana

kibana介绍

Kibana是一个开源的可视化平台,可以为ElasticSearch集群的管理提供友好的Web界面,帮助汇总,分析和搜索重要的日志数据。 

文档路径: https://www.elastic.co/guide/en/kibana/current/setup.html

kibana部署

第一步

: 在kibana服务器(VM1)上安装kibana

将提前下载好的包上传到vm1上进行安装

[root@vm1 ~]# rz -E
rz waiting to receive.
[root@vm1 ~]# ls
anaconda-ks.cfg  elasticsearch-6.5.2.rpm  kibana-6.5.2-x86_64.rpm


安装
[root@vm1 ~]# rpm -ivh kibana-6.5.2-x86_64.rpm 
warning: kibana-6.5.2-x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:kibana-6.5.2-1                   ################################# [100%]

第二步

配置kibana

[root@vm1 ~]# cat /etc/kibana/kibana.yml |grep -v '#' |grep -v '^$'
server.port: 5601                                     端口
server.host: "0.0.0.0"                                 监听所有,允许所有人能访问
elasticsearch.url: "http://192.168.100.20:9200"      ES集群的路径
logging.dest: /var/log/kibana.log                    加了kibana日志,方便排错与调试


日志要自己建立,并修改owner和group属性
[root@vm1 ~]# touch /var/log/kibana.log
[root@vm1 ~]# chown kibana.kibana /var/log/kibana.log 

第三步

启动kibana

[root@vm1 ~]# systemctl restart kibana
[root@vm1 ~]# systemctl enable kibana
Created symlink /etc/systemd/system/multi-user.target.wants/kibana.service → /etc/systemd/system/kibana.service.
[root@vm1 ~]# ss -anlt
State      Recv-Q      Send-Q           Local Address:Port           Peer Address:Port     Process     
LISTEN     0           511                    0.0.0.0:5601                0.0.0.0:*                    
LISTEN     0           128                    0.0.0.0:22                  0.0.0.0:*                    
LISTEN     0           4096                         *:9300                      *:*                    
LISTEN     0           128                       [::]:22                     [::]:*                    
LISTEN     0           4096                         *:9200                      *:*  

此时5601已启动

第四步

:通过浏览器访问 http://kibana服务器IP:5601

kibana汉化 

https://github.com/anbai-inc/Kibana_Hanization/

提前下载好的包上传到vm1
[root@vm1 ~]# rz -E
rz waiting to receive.
[root@vm1 ~]# ls
anaconda-ks.cfg          kibana-6.5.2-x86_64.rpm
elasticsearch-6.5.2.rpm  kibana-6.5.4_hanization-master.zip


[root@vm1 ~]# unzip Kibana_Hanization-master.zip -d /usr/local
[root@vm1 ~]# cd /usr/local/Kibana_Hanization-master/

这里要注意:1,要安装python; 2,rpm版的kibana安装目录为/usr/share/kibana/
[root@vm1 Kibana_Hanization-master]# python main.py /usr/share/kibana/

汉化完后需要重启
[root@vm1 Kibana_Hanization-master]# systemctl stop kibana
[root@vm1 Kibana_Hanization-master]# systemctl start kibana

再次通过浏览器访问 http://kibana服务器IP:5601

打开系统监控

 

通过kibana查看集群信息 

通过kibana查看logstash收集的日志索引

 

 导入索引

 匹配到logstash传过来的索引,点击下一步

 用同样的方法导入三个

最后点发现查看 

通过kibana做可视化图形

 

 

 

保存

 

filebeat

因为logstash消耗内存等资源太高,如果在要采集的服务上都安装logstash,这样对应用服务器的压力增 加。所以我们要用轻量级的采集工具才更高效,更省资源。

  • beats是轻量级的日志收集处理工具,Beats占用资源少
  • Packetbeat: 网络数据(收集网络流量数据)
  • Metricbeat: 指标 (收集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
  • Filebeat: 文件(收集日志文件数据)
  • Winlogbeat: windows事件日志(收集 Windows 事件日志数据)
  • Auditbeat:审计数据 (收集审计日志)
  • Heartbeat:运行时间监控 (收集系统运行时的数据)

filebeat可以直接将采集的日志数据传输给ES集群(EFK), 也可以给logstash(5044端口接收)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2056202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

校园快递代取系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家,服务很多代码文档,百分百好评,战绩可查!!入职于互联网大厂,可以交流,共同进步。有保障的售后 代码参考数据库参…

Windows搭建我的世界MC服务器 【Minecraft外网联机教程】

目录 ⛳️推荐 1. 搭建我的世界服务器 1.1 服务器安装java环境 1.2 配置服务端 1.3 创建我的世界服务器 2. 局域网联机测试 3. 安装cpolar内网穿透 4. 公网联机Minecraft 5. 配置固定远程联机端口地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通…

【启明智显技术分享】工业级HMI芯片Model系列GUI合成到项目中的指南

在工业自动化、智能终端HMI、车载仪表盘等领域,高性能的HMI(人机界面)芯片是不可或缺的核心组件。启明智显推出的Model系列(如Model3C、Model3、Model4)HMI芯片,以其卓越的性能和广泛的应用领域&#xff0c…

大模型学习应用 2:快速上手大模型基于langchain实现RAG检索应用

快速上手大模型基于langchain实现RAG检索应用 - 项目作业 目录 准备工作镜像选择算力选择安装包数据说明提示参考链接 Task1 申请 api 后,使用 langchain 导入大模型,并打印出大模型信息Task2 使用 langchian 加载数据,并把数据打印出来Task…

WebSocket 快速入门

WebSocket是什么 WebSocket 是基于 TCP 的一种新的应用层网络协议。它实现了浏览器与服务器全双工通信,即允许服务器主动发送信息给客户端。因此,在 WebSocket 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性…

Linux系统中安装Git(详细教程)

在Linux系统中安装Git,可以通过多种方式来实现,主要包括使用包管理器安装和从源代码编译安装。以下是详细的安装步骤: 一、使用包管理器安装(不建议该方式) 大多数Linux发行版都提供了包管理器,如Debian/…

90%的人都在用这7个图片转pdf技巧,转换速度很快!

图片怎么转换成pdf格式?图片和pdf格式是两种完全不一样的格式,但是如果想要将图片转换成pdf格式还是蛮容易的,常见的方法就有数十种了。 本文整理了几种常见的图片转pdf的方法,包括图片转pdf在线方法,有需要的朋友可以…

取证工具 ElcomSoft iOS Forensics Toolkit: 在 Windows 中加载 HFS 镜像

天津鸿萌科贸发展有限公司是 ElcomSoft 系列取证软件的授权代理商。 Elcomsoft iOS Forensics Toolkit 功能简介 Elcomsoft iOS Forensics Toolkit 软件工具包适用于取证工作,对 iPhone、iPad 和 iPod Touch 设备执行完整文件系统和逻辑数据采集。对设备文件系统制…

【Linux操作系统】基础IO

目录 一、接口使用1.1 铺垫知识1.2 C接口使用1.3 系统接口使用 二、认识fd三、缓冲区四、文件系统五、软硬连接六、动静态库6.1 静态库的制作和使用6.1 动态库的制作和使用 七、理解动态库加载 一、接口使用 1.1 铺垫知识 文件文件内容文件属性 。一个文件如果它的文件内容为…

AI产品经理如何入门?零基础入门到精通,收藏这一篇就够了

现在做产品经理,真的挺累的。 现在产品越来越难做,晋升困难,工资迟迟不涨……公司裁员,产品经理首当其冲!! 做产品几年了,还没升职,就先到了“职业天花板”。 想凭工作几年积累的…

linux被植入木马排查思路

linux被植入木马排查思路 一、是否侵入检查 1)检查系统登录日志 last命令 2)检查系统用户 1、检查是否有异常用户 cat /etc/passwd 2、查看是否产生了新用户、uid和gid为0的用户 grep "0" /etc/passwd 3、查看passwd的修改时间&#xf…

CY7C68000 实现High Speed USB2 UART

已经在Malogic PFGA Board 上用CY7C68000 实现High Speed USB2UART,店铺还上架了 ULPI (USB3300)的 TestBench 和ModelSim 验证环境,刚刚写出来的,其实效果和UTMI差不多, 比UTMI麻烦一些,需要写…

k8s篇之kubectl安装命令自动补全插件

1. 简介 常见情况:在部署生产环境或者测试环境的k8s集群时,常因输入命令繁琐,使得执行相关k8s操作排错时麻烦,以下自动补全插件即可解决这一问题。 以下安装亲测有效 2. 安装 安装bash completion yum install -y bash-comple…

车载以太网交换机入门基本功(3)—VLAN 转发

在《车载以太网交换机入门基本功(2)》中提到,报文通过携带Tag字段,表明报文所属的VLAN。本文将介绍携带Tag报文在VLAN下的转发过程。而在实际转发过程中,交换机的端口属性起到关键作用。 交换机端口属性 交换机的端口…

计算机毕业设计选题推荐-地震数据分析与预测-Python爬虫可视化

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Java语言程序设计——篇十五(2)

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…

如何在C++ QT 程序中集成cef3开源浏览器组件去显示网页?

目录 1、问题描述 2、为什么选择cef3浏览器组件 3、cef3组件的介绍与下载 4、将cef3组件封装成sdk 5、如何使用cef3组件加载web页面 5.1、了解CefApp与CefClient 5.2、初始化与消息循环 5.3、如何创建浏览器 5.4、重载CefClient类 6、在qt客户端集成cef组件 7、最后…

国内外大模型汇总:Open AI大模型、Google大模型、Microsoft大模型、文心一言大模型、通义千问大模型、字节豆包大模型、智普清言大模型

Open AI大模型 特点: 多模态能力:如GPT-4o,能接受文本、音频、图像作为组合输入,并生成任意形式的输出。 情感识别与回应:具备情感识别能力,能根据对话者的情绪做出有感情的回应。 几乎无延迟&#xff…

python中sum是什么意思

在开发语言中,sum函数是求和函数,用于求多个数据的和。而在python中,虽然也是求和函数,但稍微有些差别,sum()传入的参数得是可迭代对象(比如列表就是一个可迭代对象),返回这个被传入…

webflux源码解析(3)-reactor netty

目录 1.连接的状态2.reactor netty中的连接状态3. webflux中的io处理4.总结 为什么webflux在io密集型的场景能有效的提升系统吞吐量呢? 是因为它使用的是响应式编程,使用的是NIO,但这里的响应式、nio到底是怎么样的呢?响应式编程上…