# 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 &