Files
flowfish/scripts/setup-local-env.sh
taylanbakircioglu 6e503368f7 feat: L7 (Application Level) observability — Service Map, Trace Explorer, APM, Beyla
- Grafana Beyla DaemonSet for kernel-level HTTP/gRPC/DNS capture (passive,
  zero application changes, W3C traceparent header propagation)
- flowfish-l7-collector in-cluster bridge: OTLP receiver + buffered pull API
- L7 Ingestion Service: K8s service-proxy poll → enrich → RabbitMQ
- ClickHouse l7_http_flows / l7_grpc_flows / l7_dns_flows + APM RED MVs
- Neo4j L7Workload nodes + SAME_WORKLOAD cross-cluster bridges
- New pages: Service Map, Trace Explorer, APM Services List, APM Service Detail
- Analysis Wizard now supports L4 / L7 / Both modes with HTTP/gRPC/DNS picks
- Integration Hub gains L7 dependency summary + tree-summary integrations
- Multi-Cluster Management: dual-agent install (Inspector Gadget L4 + Beyla L7),
  runtime OpenShift detection so SCCs auto-install with kubectl too
- ServiceMap edge → Trace Explorer drill-down with virtual_trace_id correlation
- Docs: new L7 architecture diagram, README L7 sections, 3 new screenshots
2026-05-14 10:09:15 +03:00

262 lines
7.5 KiB
Bash
Executable File

#!/bin/bash
# Flowfish Local Environment Setup Script
# This script sets up minikube, docker, and all dependencies for Flowfish
set -e
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
NC='\033[0m'
# Print functions
print_header() {
echo -e "${PURPLE}================================================================${NC}"
echo -e "${PURPLE} $1${NC}"
echo -e "${PURPLE}================================================================${NC}"
}
print_status() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Check if running on macOS
if [[ "$OSTYPE" != "darwin"* ]]; then
print_error "This script is designed for macOS. For other platforms, please install manually."
exit 1
fi
print_header "🐟 Flowfish Local Environment Setup"
# Function to check if command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Check and install Homebrew
check_homebrew() {
print_status "Checking Homebrew installation..."
if ! command_exists brew; then
print_status "Installing Homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
print_success "Homebrew installed"
else
print_success "Homebrew is already installed"
fi
}
# Check and install Docker
check_docker() {
print_status "Checking Docker installation..."
if ! command_exists docker; then
print_status "Installing Docker Desktop..."
brew install --cask docker
print_warning "Please start Docker Desktop manually and then re-run this script"
exit 1
elif ! docker info >/dev/null 2>&1; then
print_error "Docker is installed but not running. Please start Docker Desktop."
exit 1
else
print_success "Docker is running"
fi
}
# Check and install kubectl
check_kubectl() {
print_status "Checking kubectl installation..."
if ! command_exists kubectl; then
print_status "Installing kubectl..."
brew install kubectl
print_success "kubectl installed"
else
print_success "kubectl is already installed"
fi
}
# Check and install minikube
check_minikube() {
print_status "Checking minikube installation..."
if ! command_exists minikube; then
print_status "Installing minikube..."
brew install minikube
print_success "minikube installed"
else
print_success "minikube is already installed"
fi
}
# Start minikube with proper configuration
setup_minikube() {
print_status "Setting up minikube..."
# Check if minikube is running
if minikube status >/dev/null 2>&1; then
print_warning "Minikube is already running. Do you want to restart with optimal settings? [y/N]"
read -r response
if [[ "$response" =~ ^[Yy]$ ]]; then
minikube stop
minikube delete
else
print_status "Continuing with existing minikube instance..."
return 0
fi
fi
print_status "Starting minikube with Flowfish-optimized settings..."
minikube start \
--cpus=4 \
--memory=8g \
--disk-size=50g \
--driver=docker \
--kubernetes-version=v1.28.3
print_success "Minikube started successfully"
}
# Enable required addons
setup_addons() {
print_status "Enabling minikube addons..."
# Enable ingress
minikube addons enable ingress
print_success "Ingress addon enabled"
# Enable metrics-server
minikube addons enable metrics-server
print_success "Metrics server enabled"
# Enable dashboard (optional)
minikube addons enable dashboard
print_success "Dashboard addon enabled"
print_status "Waiting for ingress controller to be ready..."
kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=300s
}
# Deploy Flowfish
deploy_flowfish() {
print_status "Deploying Flowfish to minikube..."
cd deployment/kubernetes-manifests
# Run the deployment script
if [ -f "./deploy-local.sh" ]; then
print_status "Using automated deployment script..."
./deploy-local.sh deploy
else
print_error "Deployment script not found. Please run from flowfish project root."
exit 1
fi
cd - > /dev/null
}
# Show final status and URLs
show_completion() {
print_header "🎉 Flowfish Setup Complete!"
echo
echo -e "${GREEN}✅ Installation completed successfully!${NC}"
echo
echo -e "${BLUE}🌐 Access URLs:${NC}"
echo " Web UI: http://flowfish.local"
echo " API: http://flowfish.local/api"
echo " Health: http://flowfish.local/api/v1/health"
echo
echo -e "${BLUE}🔐 Default Credentials:${NC}"
echo " Username: admin"
echo " Password: admin123"
echo
echo -e "${BLUE}📊 Useful Commands:${NC}"
echo " Status: cd deployment/kubernetes-manifests && ./deploy-local.sh status"
echo " Logs: cd deployment/kubernetes-manifests && ./deploy-local.sh logs"
echo " Dashboard: minikube dashboard"
echo " Cleanup: cd deployment/kubernetes-manifests && ./deploy-local.sh destroy"
echo
echo -e "${YELLOW}💡 Next Steps:${NC}"
echo " 1. Open http://flowfish.local in your browser"
echo " 2. Login with admin credentials"
echo " 3. Add your local cluster (minikube)"
echo " 4. Create your first analysis"
echo " 5. View the live dependency map"
echo
echo -e "${PURPLE}🐟🌊 Happy analyzing with Flowfish!${NC}"
}
# Main execution
main() {
case "${1:-full}" in
"full"|"install"|"setup")
check_homebrew
check_docker
check_kubectl
check_minikube
setup_minikube
setup_addons
deploy_flowfish
show_completion
;;
"minikube-only")
check_minikube
setup_minikube
setup_addons
print_success "Minikube setup complete. Run '$0 deploy' to install Flowfish."
;;
"deploy-only")
deploy_flowfish
show_completion
;;
"check")
check_homebrew
check_docker
check_kubectl
check_minikube
print_success "All prerequisites are installed"
;;
"help"|"-h"|"--help")
echo "Flowfish Local Environment Setup"
echo
echo "Usage: $0 [COMMAND]"
echo
echo "Commands:"
echo " full Install everything (default)"
echo " minikube-only Setup minikube only"
echo " deploy-only Deploy Flowfish only (assumes minikube ready)"
echo " check Check if prerequisites are installed"
echo " help Show this help"
echo
echo "Examples:"
echo " $0 # Full installation"
echo " $0 check # Check prerequisites"
echo " $0 deploy-only # Deploy Flowfish to existing minikube"
;;
*)
print_error "Unknown command: $1"
echo "Use '$0 help' for usage information"
exit 1
;;
esac
}
# Run main function
main "$@"