elasticsearch 官網 https://www.elastic.co/cn/
elasticsearch 下載下傳位址 https://www.elastic.co/cn/downloads/elasticsearch
skywalking 官網 http://skywalking.apache.org/
一 elasticsearch 安裝
此處,我安裝的是 6.8.6 , 注意:es7 和 skywalking6 會有相容問題,啟動skywalking背景會失敗,且報錯:空指針
Elasticsearch 是一個分布式、RESTful 風格的搜尋和資料分析引擎,能夠解決不斷湧現出的各種用例。 作為 Elastic Stack 的核心,它集中存儲您的資料,幫助您發現意料之中以及意料之外的情況。
1. elasticsearch 下載下傳安裝
進入官網下載下傳位址,找到linux 版本,下載下傳 .tar.gz 壓縮包并解壓
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.6.tar.gz
tar -zxvf elasticsearch-6.8.6.tar.gz -C /usr/local/
cd /usr/local/elasticsearch-6.8.6/
vim /etc/profle 添加如下内容(根據官網說法必須要配 $ES_HOME, 實測發現不配也沒影響):
export ES_HOME=/usr/local/elasticsearch-6.8.6
添加完後 source /etc/profile
[[email protected] ~]# source /etc/profile
2. 建立普通使用者并啟動
啟動 elasticsearch 不能使用root使用者,否則啟動時報錯。
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
建立普通使用者
ElasticSerach要求以非root身份啟動,是以我們要建立一個使用者:
1>. 建立使用者組: groupadd devops
2>. 建立使用者wudi加入使用者組: useradd wudi -g devops (-g 後面跟的是使用者組)
3>. 設定elasticSearch檔案夾為使用者wudi所有:chown -R wudi:devops /usr/local/elasticsearch-6.8.6/ (wudi:devops ---> OWNER:GROUP)
啟動elasticsearch -- 必須切換到普通使用者
su wudi
/usr/local/elasticsearch-6.8.6/bin/elasticsearch 前台啟動(不推薦,關閉視窗,服務會停止)
/usr/local/elasticsearch-6.8.6/bin/elasticsearch -d 背景啟動 (推薦)
如果使用elasticsearch 7啟動,有可能報 java版本低,需要java11,不用管 。建議用elasticsearch 6, 因為7會有各種問題,使用7,skywalking後端會啟動失敗,報空指針 檢視程序,你會發現,elasticsearch 已經使用 java1.8 啟起來了(需要/etc/profile配置的有java環境變量 JAVA_HOME)啟動後,netstat -tlnp 會發現多了個9200 和 9300 端口
9200 端口 用于外部通訊,基于http協定
9300 端口 用于es叢集節點之間通信,遵循tcp協定,通過tcp協定通信
檢視日志指令: tail -f /usr/local/elasticsearch-6.8.6/logs/elasticsearch.log
啟動 elasticsearch 後 檢查服務是否正常響應 curl 127.0.0.1:9200
如果想更改配置,比如端口等 對應配置檔案 elasticsearch-6.8.6/config/elasticsearch.yml
elasticsearch 的 jvm參數可在 /usr/local/elasticsearch-6.8.6/config/jvm.options 中修改
至此,ElasticSearch服務啟動成功.
此時 elasticsearch 9200端口隻能供本機通路
[[email protected] ~]$ curl 127.0.0.1:9200
{
"name" : "rE2m-B5",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "7iZde3zTTR-JDHZZijzm7g",
"version" : {
"number" : "6.8.6",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "3d9f765",
"build_date" : "2019-12-13T17:11:52.013738Z",
"build_snapshot" : false,
"lucene_version" : "7.7.2",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
[[email protected] ~]$
要想和skywalking配合使用還需要對 elasticsearch 進行配置
對應配置檔案 elasticsearch-6.8.6/config/elasticsearch.yml
預設 elasticsearch-6.8.6/config/elasticsearch.yml 配置檔案中的内容是全部注釋的。我們接下來進行如下設定
cluster.name: production-application
node.name: production-node-1
# 首次啟動會自動生成data目錄
path.data: /usr/local/elasticsearch-6.8.6/data
path.logs: /usr/local/elasticsearch-6.8.6/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 192.168.158.130
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.158.130"]
discovery.zen.minimum_master_nodes: 1
切記,cluster.name 名字要與 skywalking 中配置的一緻。
比如 , Set the bind address to a specific IP (IPv4 or IPv6):
network.host: 192.168.158.130 # 注意,中間有個空格
3. tail -f logs/production-application.log 遇到的警告或報錯:
報錯1:
Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file logs/gc.log due to No such file or directory
解決方案:
以wudi使用者建立gc.log
touch /usr/local/elasticsearch-6.8.6/logs/gc.log
報錯2:
max number of threads [3802] for user [wudi] is too low, increase to at least [4096]
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max number of threads [3802] for user [wudi] is too low, increase to at least [4096]
解釋:
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535] 意為:
每個程序最大同時打開檔案數太小,最大才4096
[2]: max number of threads [3802] for user [wudi] is too low, increase to at least [4096] 意為:
wudi 使用者的 最大使用者程序數太小,最大才3802
查詢wudi 使用者和 root 使用者 ,每個程序最大同時打開檔案數的大小,可通過下面兩個指令檢視目前數量
ulimit -Hn
ulimit -Sn
wudi使用者
[[email protected] elasticsearch-6.8.6]$ ulimit -Hn
4096
[[email protected] elasticsearch-6.8.6]$ ulimit -Sn
1024
[[email protected] elasticsearch-6.8.6]$ ulimit -u
3802
root使用者
[[email protected] ~]# ulimit -Hn
4096
[[email protected] ~]# ulimit -Sn
1024
[[email protected] ~]# ulimit -u
3802
查詢 wudi 使用者 和root 使用者 的 最大使用者程序
wudi使用者
[[email protected] elasticsearch-6.8.6]$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 3802
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 3802
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[[email protected] elasticsearch-6.8.6]$
可知,wudi 使用者,最大使用者程序為 3802 (也可切換到wudi使用者,ulimit -u 檢視)
root使用者
[[email protected] ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 3802
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 3802
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[[email protected] ~]#
可知,root 使用者,最大使用者程序為 3802 (也可直接 ulimit -u 檢視)
解決方案:
切換到root使用者,編輯 /etc/security/limits.conf 檔案,vim /etc/security/limits.conf,(/etc/security/limits.conf 檔案内容預設是全注釋了的)增加如下配置,使用者退出後重新登入生效
# 檔案描述符大小
root soft nofile 65535
root hard nofile 65535
* soft nofile 165535
* hard nofile 165535
# 使用者最大程序數修改
wudi soft nproc 4096
wudi hard nproc 4096
* soft nproc 8000
* hard nproc 8000
注意:
1:檢視現在的檔案描述符大小和使用者最大程序數
檢視全部
# ulimit -a
檢視檔案描述符大小,即最大打開的檔案數
# ulimit -n
檢視使用者最大程序數大小
# ulimit -u
2: 解釋
soft nofile: 可打開的檔案描述符的最大數(軟限制)
hard nofile: 可打開的檔案描述符的最大數 (硬限制)
soft nproc: 單個使用者可用的最大程序數量(軟限制)
hard nproc: 單個使用者可用的最大程序數量(硬限制)
* :代表所有使用者(已明确指定的使用者除外後的其他所有使用者),也可以寫成你需要修改的使用者名
修改完配置檔案後不需要重新開機,但是要使用者退出重新登入才能生效。
wudi使用者
root使用者
報錯3:
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解決方案:
檢視max_map_count值:more /proc/sys/vm/max_map_count
eg:
[[email protected] ~]# more /proc/sys/vm/max_map_count
65530
使用 root 使用者執行以下指令:
修改 /etc/sysctl.conf 檔案(預設檔案内容是全部注釋了的),vim /etc/sysctl.conf 增加配置
vm.max_map_count=262144
如圖:
然後,執行 sysctl -p 指令使生效
如圖:
此時,無論使用root使用者還是wudi使用者,檢視max_map_count 的值都已經變為了 262144
注意:
在 /etc/sysctl.conf 檔案中,其實還可以添加以下配置進行優化:sysctl中網絡的配置注意,需要執行 sysctl -p 指令使生效。net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.ip_local_port_range = 10000 65000 net.ipv4.tcp_max_syn_backlog = 262144 net.netfilter.nf_conntrack_max = 1048576
報錯4:
在解決以上各種報錯後,啟動時報錯:
org.elasticsearch.transport.RemoteTransportException: [production-node-1][192.168.158.130:9300][internal:cluster/coordination/join]
Caused by: org.elasticsearch.cluster.coordination.CoordinationStateRejectedException: incoming term 1 does not match current term 2
原因:
該節點之前已經啟動過,有曆史資料沒有清理
解決方案:
檢視 config/elasticsearch.yml檔案中配置的path.data目錄,進入該目錄并删除。重新啟動即可。
--------------------------------------------------------------
二 skywalking安裝部署
1. skywaking 下載下傳安裝
wget http://mirror.bit.edu.cn/apache/skywalking/6.6.0/apache-skywalking-apm-6.6.0.tar.gz
tar -zxvf apache-skywalking-apm-6.6.0.tar.gz -C /usr/local/
cd /usr/local/apache-skywalking-apm-bin/
2. 配置修改
vim apache-skywalking-apm-bin/config/application.yml ,主要修改以下子產品的配置:
核心子產品core主要修改以下配置:
core:
default:
# Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate
# Receiver: Receive agent data, Level 1 aggregate
# Aggregator: Level 2 aggregate
role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator
#restHost: ${SW_CORE_REST_HOST:0.0.0.0}
restHost: 192.168.158.130
#restPort: ${SW_CORE_REST_PORT:12800}
restPort: 12800
#restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}
restContextPath: /
#gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}
gRPCHost: 192.168.158.130
#gRPCPort: ${SW_CORE_GRPC_PORT:11800}
gRPCPort: 11800
downsampling:
- Hour
- Day
- Month
資料存儲子產品storage 主要修改以下配置(預設使用h2存儲資料,此處我改為使用elasticsearch存儲資料,注意:需要把h2的配置全注釋掉):
storage:
elasticsearch:
# nameSpace: ${SW_NAMESPACE:""}
nameSpace: production-application
# clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
clusterNodes: 192.168.158.130:9200
# protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
# trustStorePath: ${SW_SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"}
# trustStorePass: ${SW_SW_STORAGE_ES_SSL_JKS_PASS:""}
# user: ${SW_ES_USER:""}
# password: ${SW_ES_PASSWORD:""}
# indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
# indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
...................
# h2:
# driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
# url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
# user: ${SW_STORAGE_H2_USER:sa}
# metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
...................
3. 前端UI 配置修改
編輯webapp/ webapp.yml檔案,vim apache-skywalking-apm-bin/webapp/webapp.yml 修改如下:
server:
port: 8080
collector:
path: /graphql
ribbon:
ReadTimeout: 10000
# Point to all backend's restHost:restPort, split by ,
listOfServers: 127.0.0.1:12800
改成
server:
port: 9090
collector:
path: /graphql
ribbon:
ReadTimeout: 50000
# Point to all backend's restHost:restPort, split by ,
listOfServers: 192.168.158.130:12800
4. 啟動執行
/usr/local/apache-skywalking-apm-bin/bin/startup.sh (windows啟動 bin/startup.bat)
(備注預設端口是8080, 如需修改端口可如下操作,如需修改,可在/usr/local/apache-skywalking-apm-bin/webapp/webapp.yml 檔案中修改)
starup.sh 會同時啟動skywalking 前端和後端。
也可以分開啟動:
啟動前端 apache-skywalking-apm-bin/bin/webappService.sh
啟動後端 apache-skywalking-apm-bin/bin/oapService.sh
首次啟動會進行初始化,往es 中建立所需庫表。
通路 192.168.158.130:9090 即可登入到 skywalking 的 UI 界面:
三 配置 skywalking 用戶端
在 解壓後apache-skywalking-apm-bin 中有一個agent檔案夾,該檔案夾即為skywalking的用戶端
設定skywalking用戶端配置,vim apache-skywalking-apm-bin/agent/config/agent.config 設定如下
#agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
agent.service_name=production-application
# collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.158.130:11800}
# Logging file_name
logging.file_name=${SW_LOGGING_FILE_NAME:skywalking-api.log} # 保持該預設值即可
# Logging level
logging.level=${SW_LOGGING_LEVEL:DEBUG} # 保持該預設值即可
修改完後,可以将 apache-skywalking-apm-bin/agent 壓縮一下傳輸到用戶端伺服器上。
3.1 jar檔案 應用配置 skywalking 用戶端
在啟動應用的指令行添加 -javaagent 參數
nohup java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -jar yourApp.jar &
比如,重新開機腳本 restart.sh 内容配置如下:
#!/bin/bash
ps aux | grep trace-provider-1.0.0.jar |grep -v grep|cut -c 9-15|xargs kill
echo "==================關閉完畢!=========================="
echo "---------------開始啟動jar服務-------------------------"
cd /home/work/trace-provider
nohup java -javaagent:/home/application/agent/skywalking-agent.jar -jar trace-provider-1.0.0.jar &
3.2 tomcat 應用配置 skywalking 用戶端
編輯 tomcat/bin/catalina.sh
首行添加如下代碼
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/home/work/skywalking-agent/skywalking-agent.jar"