Elasticstack-日志分析平台

 

# ElasticStack-日志分析平台

## 1.Filebeat

```shell
vim  /etc/hosts
ip1 dijia
ip2 meimei
ip3 biaobei
```

### Filebeat安装

 ```shell
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.13.2-linux-x86_64.tar.gz
tar xzcf filebeat-7.13.2-linux-x86_64.tar.rz -C /usr/local
mv /usr/local/filebeat-7.13.2-linux-x86_64 /usr/local/filebeat
 ```

Filebeat启动管理

1.前台运行 

采用前台运行的方式查看Filebeat获取的日志结果 

2.后台运行 

使用nohup方式启动Filebeat到后台,日志结果可查看nohup.out文件 

使用systemd管理的后台方式启动Filebeat进程不能查看输出日志,**测试阶段勿用** 

配置systemd方式的Filebeat启动管理文件

```shell
vim /usr/lib/systemd/system/filebeat.service 
[Unit]
Description=Filebeat sends log files to Logstash or directly to Elasticsearch. 
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml
Restart=always
[Install]
WantedBy=multi-user.target

# systemctl daemon-reload # systemctl start filebeat
```

### 配置Filebeat输出到kafka

```shell
vim /usr/local/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true #改
  paths: 
    - /tmp/*.log #改 指定需要收集日志的路径,支持通配符可以写多个
filebeat.config.modules:# 内置的收集日志的模块配置文件的存放路径
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false # 当模块的配置文件有更新时,此程序是否要自动加载,false不加载,true 加载
setup.template.settings:
  index.number_of_shards: 1
# 修改输出目标为kafka集群
output.kafka:
  # initial brokers for reading cluster metadata
  hosts: ["dijia:9092", "meimei:9092", "meimei:9092"]
  
  topic: 'nginx'
  partition.round_robin:
    reachable_only: false
  required_acks: 1
  compression: gzip
  max_message_bytes: 1000000
```

## 2.配置Kafka集群

高吞吐量:kafka每秒可以处理几十万条消息。 

可扩展性:kafka集群支持热扩展- 持久性、 

可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失 

容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败) 

高并发:支持数千个客户端同时读写 

它主要包括以下组件 :话题(Topic)、生产者(Producer)、消费者(Consumer)、中间人(Broker)、区(partition):每个 topic 包含一个或多个 partition。 

replication:partition 的副本,保障 partition 的高可用。 

leader:replica 中的一个角色, producer 和 consumer 只跟 leader 交互。 

follower:replica 中的一个角色,从 leader 中复制数据。 

zookeeper:kafka 通过 zookeeper 来存储集群的信息。

**ZooKeeper**是一个分布式协调服务,它的主要作用是为分布式系统提供一致性服务,提供的功能包括:配置维护、分布式同步等。**Kafka的运行依赖ZooKeeper**

### **安装kafka**

### **安装kafka**

```shell
yum install -y java-1.8.0-openjdk
wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.8.0/kafka_2.12-2.8.0.tgz
tar xzvf kafka_2.12-2.8.0.tgz -C /usr/local/
mv /usr/local/kafka_2.12-2.8.0/ /usr/local/kafka/
```

### **配置ZOOKEEPER**

```shell
sed -i 's/^[^#]/#&/' /usr/local/kafka/config/zookeeper.properties
vim /usr/local/kafka/config/zookeeper.properties	#添加如下配置
dataDir=/opt/data/zookeeper/data	# 需要创建,所有节点一致
dataLogDir=/opt/data/zookeeper/logs	# 需要创建,所有节点一致
clientPort=2181	#客户端连接ZK服务的端口
tickTime=2000	#ZK服务器之间或客户端与服务器之间维持心跳的时间间隔。
initLimit=20	#允许follower连接并同步到Leader的初始化连接时间,当初始化连接时间超过该值,则表示连接失败。
syncLimit=10	#Leader与Follower之间发送消息时如果follower在设置时间内不能与leader通信,那么此follower将会 被丢弃。
# 以下 IP 信息根据自己服务器的 IP 进行修改
server.1=ip1:2888:3888	#//kafka集群IP:Port
server.2=ip2:2888:3888
server.3=ip3:2888:3888	#2888是follower与leader交换信息的端口,3888是当leader挂了时用来执 行选举时服务器相互通信的端口。
```

创建data、log目录 
mkdir -p /opt/data/zookeeper/{data,logs} 

创建myid文件 

echo 1 > /opt/data/zookeeper/data/myid #myid号按顺序排

**其他机器如上配置**:只需更改myid序号

### 配置kafka

```shell
sed ‐i 's/^[^#]/#&/' /usr/local/kafka/config/server.properties
vim /usr/local/kafka/config/server.properties #在最后添加
broker.id=1	#每一个broker在集群中的唯一标识
listeners=PLAINTEXT://ip1:9092	#监听地址
num.network.threads=3	#broker 处理消息的最大线程数,一般情况下不需要去修改
num.io.threads=8	#broker处理磁盘IO 的线程数 ,数值应该大于你的硬盘数
socket.send.buffer.bytes=102400	#socket的发送缓冲区
socket.receive.buffer.bytes=102400	#socket的接收缓冲区
socket.request.max.bytes=104857600	#socket请求的最大数值,防止serverOOM,message.max.bytes必然要小于socket.request.max.bytes,会 被topic创建时的指定参数覆盖
log.dirs=/opt/data/kafka/logs	#日志文件目录
num.partitions=6	#
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=536870912
log.retention.check.interval.ms=300000
zookeeper.connect=ip1:2181,ip2:2181,ip3:2181	#ZK主机地址,如果zookeeper是集群则以逗号隔开
zookeeper.connection.timeout.ms=6000	#连接到Zookeeper的超时时间。
group.initial.rebalance.delay.ms=0
```

**mkdir -p /opt/data/kafka/logs**

**其余机器如上配置**:只需更改broker-id、与ip.listens

启动zookeeeper、kafka

```shell
cd /usr/local/kafka
nohup bin/zookeeper-server-start.sh config/zookeeper.properties   &
nohup bin/kafka-server-start.sh config/server.properties & #后台运行
```

验证kafka

```shell
在ip1上创建topic-dijia
[root@es03 kafka]bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication‐factor 1 --partitions 1 --opic dijia
  Created topic "lijie".
在19.22上面查询ip2上的topic
[root@es03 kafka]bin/kafka-topics.sh --zookeeper 192.168.19.20:2181 --list
```

## 3.Logstash安装

```shell
curl -OL https://artifacts.elastic.co/downloads/logstash/logstash-7.13.2-linux-x86_64.tar.gz
tar -xf logstash-7.13.2-linux‐x86_64.tar.gz -C /usr/local/
mv /usr/local/logstash-7.13.2/ /usr/local/logstash
```

### 配置logstash从kafka获取数据输出到es集群

```shell
vim /usr/local/logstash/config/lijie.conf
input {
	kafka {
		type => "nginx_log"
		codec => "json"
		topics => ["nginx"]
		decorate_events => true
		bootstrap_servers => "ip1:9092, ip2:9092, ip3:9092"
		}
	}
filter {
	grok {
	match => { "message" => "%{COMBINEDAPACHELOG}" } 
		}
	}
output {
	stdout {}
	if [type] == "nginx_log" { #和上面的type一致
	elasticsearch {
	index => "%{[host][hostname]}-nginx-%{+YYYY.MM.dd}"
	codec => "json"
	hosts => ["ip1:9200","ip2:9200","ip3:9200"]
				}
		}
   } 
```

启动logstash

```shell
cd /usr/local/logstash
./bin/logstash -f config/dijia.conf --config.reload.automatic
```

## 3.ES集群

yum -y install elasticsearch‐7.10.0-linux-x86_64.rpm

tar -xf elasticsearch-7.10.0-linux-x86_64.rpm -C /usr/local/

日志消息:/var/log/elasticsearch/elasticsearch.log

### 在每个节点设置如下集群参数 

```shell
vim /usr/local/elasticsearch-7.10.0/config/elasticsearch.yml
cluster.name: xf	#集群名称
node.name: dijia-1	#节点名称
node.data: true	#指示节点是否为数据节点
network.host: 0.0.0.0	#绑定节点IP。
http.port: 9200	#监听端口
discovery.seed_hosts: #官方指定写法如下,3台机器一样
  - jiejie #节点1主机名称
  - ip2:9300
  - ip3
cluster.initial_master_nodes: ["dijia-1", "dijia-2", "dijia-3"] 
```

```shell
sysctl -w vm.max_map_count=262144 > /etc/sysctl.conf

sysctl -p
tail /etc/security/limits.conf
#@student 
#end of file 
####下面是添加的内容
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

```

sysctl -w vm,max_map_count=262144 > /etc/sysctl.conf

sysctl -p

启动集群(按顺序启动):

```shell
systemctl daemon-reload

systemctl start elasticsearch.service
```

查看集群健康状态

```shell
curl -X GET "localhost:9200/_cat/health?v"
```

查看集群节点信息

```shell
curl -X GET "localhost:9200/_cat/nodes?v"
```

验证 Elasticsearch 集群中的索引 

```shell
curl -X GET "192.168.19.20:9200/_cat/indices"
```

## 4.安装es可视化窗口Kibana 

```shell
curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-7.13.2-linux-x86_64.tar.gz
tar xzvf kibana-7.13.2-linux‐x86_64.tar.gz -C /usr/local/
mv /usr/local/kibana-7.13.2-linux‐x86_64 /usr/local/kibana
```

### 配置主配置文件 

```shell
vim /usr/local/kibana/config/kibana.yml
server.port: 5601 #改
server.host: "0.0.0.0" #改
# 用于连接到 ES 集群的地址和端口
elasticsearch.hosts: ["http://ip1:9200"] #改
# 日志文件路径
# logging.dest: stdout
logging.dest: /var/log/kibana/kibana.log #改
# 设置页面的字体为中文
i18n.locale: "zh‐CN" #改
```

运行kabana通过普通用户运行

useradd ela
mkdir /run/kibana   /var/log/kibana/
chown ela.ela /run/kibana /var/log/kibana/ /usr/local/kibana ‐R
su ‐ ela
#运行于后台
nohup /usr/local/kibana/bin/kibana &
#####使用root运行
nohup /usr/local/kibana/bin/kibana ‐‐allow‐root &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值